HOWTO · Java

Java の JButton に ActionListener を追加する

このチュートリアルでは、Java の JButton に ActionListener を追加する方法を説明します。

このページの内容

今日は、java.awt.event の ActionListener インターフェースと、それを Java Swing パッケージの JFrame クラスのコンポーネントである JButton に追加する方法について説明します。

匿名クラスを使用して ActionListener を JButton に追加する

最初の例では、メソッド main() を使用してクラス JavaExample を作成し、そのメソッドで JFrame オブジェクトを作成します。JFrame ウィンドウで、メッセージを表示する JLabel、入力を受け取る JTextField、および ActionListener を追加する JButton の 3つのコンポーネントを作成します。

リスナーを追加するには、JButton クラスの addActionListener() 関数を呼び出します。このメソッドでは、匿名クラスを作成し、ActionListener インターフェイスの一部である actionPerformed() 関数をオーバーライドします。actionPerformed() は、アクションが実行されたときに呼び出されるメソッドです。

actionPerformed() メソッドでは、最初に JTextField に何かがあるかどうかを確認し、テキストフィールドが空の場合は、JLabel を使用してメッセージを表示します。それ以外の場合は、テキストフィールドに書き込んだメッセージを表示します。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class JavaExample {
  public static void main(String[] args) {
    JFrame jFrame = new JFrame("Java Example");

    JLabel jLabel = new JLabel();
    jLabel.setBounds(50, 150, 350, 40);

    final JTextField jTextField = new JTextField();
    jTextField.setBounds(50, 50, 150, 20);

    JButton jButton = new JButton("Submit");
    jButton.setBounds(50, 100, 100, 30);

    jButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        if (!jTextField.getText().equals(""))
          jLabel.setText(jTextField.getText());
        else
          jLabel.setText("Please write something in the edit box");
      }
    });
    jFrame.add(jLabel);
    jFrame.add(jButton);
    jFrame.add(jTextField);
    jFrame.setSize(400, 400);
    jFrame.setLayout(null);
    jFrame.setVisible(true);
  }
}

出力:

actionlistener を jbutton に追加します

匿名クラスと Lambda を使用して ActionListener を JButton に追加する

Java 8 では、この例で使用する Lambda 式が追加されました。すべて前の例と同じですが、プログラムでメソッド buttonPressed() を作成し、その関数で、テキストフィールドに書き込まれたメッセージを JLabel に出力します。

ActionListener を JButton に追加するには、addActionListener() 関数を使用し、そのメソッドでは、ラムダアプローチを使用します。ActionEvent オブジェクトであるパラメータ e を使用してから、buttonPressed() メソッドを呼び出します。

import javax.swing.*;

public class JavaExample {
  static JTextField jTextField;
  static JLabel jLabel;

  public static void main(String[] args) {
    JFrame jFrame = new JFrame("Java Example");

    jLabel = new JLabel();
    jLabel.setBounds(50, 150, 350, 40);

    jTextField = new JTextField();
    jTextField.setBounds(50, 50, 150, 20);

    JButton jButton = new JButton("Submit");
    jButton.setBounds(50, 100, 100, 30);

    jButton.addActionListener(e -> buttonPressed());

    jFrame.add(jLabel);
    jFrame.add(jButton);
    jFrame.add(jTextField);

    jFrame.setSize(400, 400);
    jFrame.setLayout(null);
    jFrame.setVisible(true);
  }

  static void buttonPressed() {
    if (!jTextField.getText().equals("")) {
      jLabel.setText(jTextField.getText());
    } else {
      jLabel.setText("Please write something in the edit box");
    }
  }
}

出力:

actionlistener を jbutton に追加します

継承を使用して ActionListener を JButton に追加する

このプログラムでは、継承の概念を使用して ActionListener を追加します。

クラス JavaExample を作成してから、クラス JFrame を拡張し、ActionListener インターフェースを実装します。ActionListener インターフェースの一部である actionPerformed() メソッドをオーバーライドする必要があります。

関数の外で使用する必要があるため、main() メソッドの外で JFrame コンポーネント変数を宣言します。JavaExample クラスのコンストラクターを作成し、その中にすべてのコンポーネントを設定します。

ActionListener を JButton コンポーネントに追加するには、addActionListener() メソッドを呼び出し、this を渡します。これは、現在のクラス JavaExample が ActionListener を実装するときに、現在のクラスのコンテキストを指します。関数を渡すための有効なコンテキスト。

actionPerformed() 関数では、ボタンが押されたときに実行する操作を記述します。main() メソッドでは、JFrame のインスタンスを作成し、そのレイアウトと可視性を設定します。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class JavaExample extends JFrame implements ActionListener {
  static JTextField jTextField;
  static JLabel jLabel;
  static JButton jButton;

  public static void main(String[] args) {
    JFrame jFrame = new JavaExample();
    jFrame.setLayout(null);
    jFrame.setVisible(true);
  }

  public JavaExample() {
    jLabel = new JLabel();
    jLabel.setBounds(50, 150, 350, 40);

    jTextField = new JTextField();
    jTextField.setBounds(50, 50, 150, 20);

    jButton = new JButton("Submit");
    jButton.setBounds(50, 100, 100, 30);

    jButton.addActionListener(this);

    add(jLabel);
    add(jButton);
    add(jTextField);

    setSize(400, 400);
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    if (!jTextField.getText().equals("")) {
      jLabel.setText(jTextField.getText());
    } else {
      jLabel.setText("Please write something in the edit box");
    }
  }
}

出力:

actionlistener を jbutton に追加します