Java에서 JButton에 ActionListener 추가
-
익명 클래스를 사용하여
JButton
에ActionListener
추가 -
익명 클래스 및 Lambda를 사용하여
JButton
에ActionListener
추가 -
상속을 사용하여
JButton
에ActionListener
추가
오늘 우리는 java.awt.event
의 ActionListener
인터페이스와 Java Swing 패키지의 JFrame
클래스의 구성요소인 JButton
에 이를 추가하는 방법에 대해 논의할 것입니다.
익명 클래스를 사용하여 JButton
에 ActionListener
추가
첫 번째 예에서는 main()
메서드를 사용하여 JavaExample
클래스를 만들고 해당 메서드에서 JFrame
개체를 만듭니다. JFrame
창에서 메시지를 표시하는 JLabel
, 입력을 받는 JTextField
, ActionListener
를 추가할 JButton
의 세 가지 구성 요소를 만듭니다.
리스너를 추가하기 위해 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를 사용하여 JButton
에 ActionListener
추가
Java 8에서는 이 예제에서 사용할 Lambda 표현식이 추가되었습니다. 모든 것은 이전 예제와 동일하지만 프로그램에서 buttonPressed()
메서드를 만들고 해당 함수에서 텍스트 필드에 작성된 메시지를 JLabel
에 인쇄합니다.
JButton
에 ActionListener
를 추가하기 위해 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");
}
}
}
출력:
상속을 사용하여 JButton
에 ActionListener
추가
이 프로그램에서는 상속 개념을 사용하여 ActionListener
를 추가합니다.
JavaExample
클래스를 생성한 다음 JFrame
클래스를 확장하고 ActionListener
인터페이스를 구현합니다. ActionListener
인터페이스의 일부인 actionPerformed()
메서드를 재정의해야 합니다.
함수 외부에서 사용해야 하기 때문에 main()
메소드 외부에서 JFrame
구성 요소 변수를 선언합니다. JavaExample
클래스의 생성자를 만들고 그 안에 모든 구성 요소를 설정합니다.
JButton
구성 요소에 ActionListener
를 추가하기 위해 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 Swing을 사용하여 캔버스 만들기
- Java 일반 텍스트 필드
- Java Swing에서 JLabel 텍스트 변경