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 日付