6.8 KiB
6.8 KiB
ActionListener와 ActionCommand 사용법
ActionListener는 버튼 클릭, 메뉴 항목 선택 등 사용자 입력에 대한 동작을 처리하는 인터페이스입니다.
ActionCommand는 특정 이벤트를 식별하는 문자열로, ActionListener가 어떤 동작을 수행해야 하는지 구분하는 데 사용됩니다.
1. ActionListener 기본 사용법
ActionListener를 사용하려면 ActionListener 인터페이스를 구현한 후 actionPerformed() 메서드를 오버라이드해야 합니다.
(1) 버튼 클릭 이벤트 처리 예제
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ActionListenerExample {
public static void main(String[] args) {
JFrame frame = new JFrame("ActionListener Example");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JButton button = new JButton("클릭하세요");
// ActionListener 추가
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "버튼이 클릭되었습니다!");
}
});
panel.add(button);
frame.add(panel);
frame.setVisible(true);
}
}
설명
JButton을 생성하고"클릭하세요"라벨을 설정.button.addActionListener()를 사용하여ActionListener추가.- 버튼을 클릭하면
actionPerformed()가 호출되어 메시지 창이 표시됨.
2. ActionCommand 활용하기
기본적으로 버튼의 텍스트가 ActionCommand로 설정되지만, 직접 지정할 수도 있습니다.
(1) 여러 버튼을 구분하는 예제
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ActionCommandExample {
public static void main(String[] args) {
JFrame frame = new JFrame("ActionCommand Example");
frame.setSize(400, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
JButton btn1 = new JButton("버튼 1");
JButton btn2 = new JButton("버튼 2");
// ActionCommand 설정
btn1.setActionCommand("BUTTON_ONE");
btn2.setActionCommand("BUTTON_TWO");
// 공통 ActionListener
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if ("BUTTON_ONE".equals(command)) {
JOptionPane.showMessageDialog(null, "버튼 1이 클릭됨!");
} else if ("BUTTON_TWO".equals(command)) {
JOptionPane.showMessageDialog(null, "버튼 2가 클릭됨!");
}
}
};
btn1.addActionListener(listener);
btn2.addActionListener(listener);
frame.add(btn1);
frame.add(btn2);
frame.setVisible(true);
}
}
설명
- 두 개의 버튼(
btn1,btn2)을 생성. setActionCommand("BUTTON_ONE")및setActionCommand("BUTTON_TWO")로 명령어 설정.- 하나의
ActionListener에서e.getActionCommand()를 사용하여 어떤 버튼이 눌렸는지 판별.
3. 별도의 ActionListener 클래스로 분리하기
코드를 깔끔하게 유지하려면 ActionListener를 별도의 클래스로 분리하는 것이 좋습니다.
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "이벤트가 발생했습니다! (" + e.getActionCommand() + ")");
}
}
public class SeparateActionListenerExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Separate ActionListener Example");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JButton button = new JButton("클릭");
button.setActionCommand("CLICK_BUTTON");
// 별도의 클래스 사용
button.addActionListener(new MyActionListener());
panel.add(button);
frame.add(panel);
frame.setVisible(true);
}
}
설명
MyActionListener클래스를 만들어ActionListener를 구현.JButton에MyActionListener를 추가.- 클릭하면
"이벤트가 발생했습니다! (CLICK_BUTTON)"메시지를 표시.
4. Lambda 표현식 사용
Java 8 이상에서는 람다를 사용하여 ActionListener를 더 간결하게 작성할 수 있습니다.
import javax.swing.*;
public class LambdaActionListenerExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Lambda ActionListener");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JButton button = new JButton("눌러보세요");
// Lambda 표현식 사용
button.addActionListener(e -> JOptionPane.showMessageDialog(null, "람다식으로 처리된 이벤트!"));
panel.add(button);
frame.add(panel);
frame.setVisible(true);
}
}
설명
ActionListener를 람다 표현식(e -> { })으로 간단하게 구현.- 코드가 더 짧고 가독성이 좋아짐.
5. 총정리
| 개념 | 설명 |
|---|---|
ActionListener |
버튼, 메뉴 항목 등의 액션 이벤트를 처리하는 인터페이스 |
actionPerformed(ActionEvent e) |
버튼 클릭 등 액션이 발생하면 호출됨 |
setActionCommand(String command) |
특정 동작을 식별하기 위한 명령어 설정 |
getActionCommand() |
이벤트 발생 시 설정된 ActionCommand 값 가져오기 |
| 구현 방식 | - 익명 클래스 (new ActionListener() {}) 사용- 별도 클래스 구현 - 람다 표현식 ( e -> { }) 사용 |
6. 어떤 방식을 사용할까?
- 버튼 수가 적다면? →
익명 클래스또는람다 표현식 - 여러 개의 버튼을 한 곳에서 처리해야 한다면? →
ActionCommand활용 - 큰 프로젝트에서 여러 UI 요소가 같은 이벤트를 공유해야 한다면? →
별도 클래스로ActionListener분리
위 내용을 이해하면 버튼 클릭뿐만 아니라 메뉴 항목 선택, 키보드 단축키 처리 등 다양한 Swing 이벤트 처리에 활용할 수 있습니다.