SwingのJButton

2021-07-17

こんにちは。

今回は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つのボタンを生成して配置している例です。

ソース
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Test2 extends JFrame {

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

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

        init();

        setVisible(true);

    }

    private void init() {
        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)メソッドで追加することができます。

活性・非活性

以下は設置した最初のボタンを活性、次のボタンを非活性にする例です。(init()メソッドの最後に追加する部分。)

ソース
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)を使うとアイコン付きボタンを作ることができます。

ソース
import java.awt.FlowLayout;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Test5 extends JFrame {

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

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

        init();

        setVisible(true);

    }

    private void init() {
        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)

以上、参考になれば幸いです。

同じカテゴリーの前後の記事