NetBeansのGUIエディタ その2

NetBeansGUIエディタが優れているのは有名な話だが、そのためにちゃんと説明してきたことが無かったなぁ。

ということで今日も昨日の続き。

実際にコンポーネントをドラッグして貼り付けた後を見てみよう。


具体的にはenumでボタンの種類を指定できるようにしてみる。

ソースのツリーからドラッグして3つ配置したところ。これをいじる。
http://shin.cside.com/diary/2010/0226-01.png


以下省略一切なしのサンプルコード。

package swingtest;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JButton;

public class HelloButton extends JButton{

    //ボタンの種類
    public enum Type {
        NETBEANS{
            @Override
            public String toString(){
                return "NetBeans";
            }
        },JAVA{
            @Override
            public String toString(){
                return "Java";
            }
        },SHINSAN{
            @Override
            public String toString(){
                return "Shinsan";
            }
        }
    }

    private Type type;
    
    //コンストラクタ
    public HelloButton() {
        setPreferredSize(new Dimension(300,100));
        type = Type.NETBEANS;
    }


    @Override
    protected void paintComponent(Graphics g) {
        g.setColor(Color.ORANGE);
        g.fillRect(0, 0, 300, 100);
        
        g.setFont(new Font("MS ゴシック",Font.BOLD , 36));

        g.setColor(Color.BLACK);
        g.drawString("Hello " +type, 5+2, 50+2);
        
        g.setColor(Color.RED);
        g.drawString("Hello "+type, 5, 50);

    }

    //--------------------------------------------------------------------------
    //以下アクセサメソッド
    //--------------------------------------------------------------------------
    public Type getType() {
        return type;
    }

    public void setType(Type type) {
        this.type = type;
    }
}

プロパティエディタにtypeプロパティが追加されているのが見える。
http://shin.cside.com/diary/2010/0226-02.png
static final int型のフラグとは違い、enumなので独自のものであっても自動で絞り込まれる。nullを対処したければ例外を出すコードを書けば設定されることは無い。ここに表示されるのはtoString()の結果なのでいろいろといじるとわかりやすくて便利になるかも。日本語も問題なく使える。

プロパティ上でいじると即時にデザイナに繁栄されているのがわかるだろうか。


Swingって所詮低レベルAPIなんでそのまま使うよりカスタムコンポーネントにして使ったほうがいいんだよね。何もロジック入れなくても継承したコンポーネント用意するだけでも後で挟み込む、カスタマイズするときにかなり便利になるし。



YOU カスタムコンポーネント作っちゃいなYO!