こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

SwingのJButton

こんにちは。「Javaを復習する初心者」です。Swingでボタンを扱ってみました。

SwingにはJButtonクラスというボタンを扱うクラスがあります。フレームにJButtonオブジェクトを追加することを試しました。ここでは基本的な使い方を紹介します。

以下のプログラムを雛形として使います。

import javax.swing.JFrame;

public class Test extends JFrame {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(350, 250);

        init();

        setVisible(true);

    }

    private void init() {
        // 設置処理
    }

}

テキスト付きのボタン

コンストラクタはいくつかあるのですが、ここではJButton(String text)を使います。

配置

以下は2つのボタンを生成して配置している例です。

        // 設置処理
        setLayout(new FlowLayout());

        JButton button1 = new JButton("test1");
        add(button1);

        JButton button2 = new JButton("test2");
        add(button2);

JFrameのLayoutManagerの初期設定がBorderLayoutのため、FlowLayoutを指定してしています。BorderLayoutの場合、最初に配置したボタンが全体に広がってしまいます。コンストラクタJButton(String text)の引数はボタンに表示される文字列です。生成したボタンオブジェクトはadd(Component comp)メソッドで追加することができます。

活性・非活性

以下は設置した最初のボタンを活性、次のボタンを非活性にする例です。

        button1.setEnabled(true);
        button2.setEnabled(false);

AbstractButtonクラスから継承されたメソッドにpublic void setEnabled(boolean b)があります。このメソッドでボタンの活性・非活性を設定することができます。引数には、ボタンを有効にする場合はtrue、そうでない場合はfalseを指定します。

ボタン押下時の動作

以下の例ではボタンの押下時の動作を設定しています。初期状態では、最初のボタンを活性、次のボタンを非活性です。最初のボタンが押下されたときの動作に、「次のボタンを活性させる」という処理を記述しています。

        button1.setEnabled(true);
        button2.setEnabled(false);

        button1.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                button2.setEnabled(true);
            }
        });

Componentクラスから継承されたメソッドにpublic void addMouseListener(MouseListener l)があります。マウス・イベントを受け取るために、このメソッド引数に指定することで、マウス・リスナーを追加することができます。MouseListenerの実装クラスにMouseAdapterクラスがあります。このクラスはメソッドの実装が空で定義されています。ボタン押下時の動作を定義するにはmouseClickedメソッドをオーバライドします。

アイコン付きのボタン

コンストラクタJButton(Icon icon)を使うとアイコン付きボタンを作ることができます。

        setLayout(new FlowLayout());

        Icon icon = new ImageIcon("icon/sample.png");

        JButton button1 = new JButton(icon);
        add(button1);

        JButton button2 = new JButton(icon);
        add(button2);

        button1.setEnabled(true);
        button2.setEnabled(false);

非活性の場合は画像はグレースケールになるようです。

テキストおよびアイコン付きのボタン

コンストラクタJButton(String text, Icon icon)を使うとテキストとアイコン付きのボタンを作ることができます。

        setLayout(new FlowLayout());

        Icon icon = new ImageIcon("icon/sample.png");

        JButton button1 = new JButton("test1", icon);
        add(button1);

        JButton button2 = new JButton("test2", icon);
        add(button2);

        button1.setEnabled(true);
        button2.setEnabled(false);

API仕様書によると、文字列とアイコンの位置はpublic void setVerticalTextPosition(int textPosition)、public void setHorizontalTextPosition(int textPosition)で調節できるようです。