Java の JButton に ActionListener を追加する
-
匿名クラスを使用して
ActionListenerをJButtonに追加する -
匿名クラスと Lambda を使用して
ActionListenerをJButtonに追加する -
継承を使用して
ActionListenerをJButtonに追加する
今日は、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);
}
}
出力:

匿名クラスと 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 を追加します。
クラス 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");
}
}
}
出力:

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn関連記事 - Java Swing
- Java での SwingUtilities.invokeLater() の使用
- Java ペイント コンポーネント
- Java Swing を使用して Canvas を作成する
- Java クリアテキストフィールド
- Java Swing で JLabel テキストを変更する
- Java Swing 日付
