K-DigitalTraining 강의/1. Java
[5주차] 94. AWT, "이벤트 처리방법1(리스너 implements)" Frame 클래스 외부 클래스에서 처리하는 방법 & 이벤트 종류
이대곤
2022. 6. 8. 17:41
버튼에서 발생하는 이벤트 처리 예시
- Button은 클릭당하면 new ActionEvent 이벤트 객체를 발생시키고, 이를 계속 살펴주는건 ActionListener이다.
import java.awt.*;
import java.awt.event.*; // ActionListener 인터페이스를 위해 한 것
class Sub2 extends Frame implements ActionListener{
Button b1 = null;
Button b2 = null;
Button b3 = null;
Button b4 = null;
Sub2(String title){
super(title);
super.setSize(400,300);
/*버튼 객체 생성*/
b1 = new Button("노란색");
b2 = new Button("빨간색");
b3 = new Button("파란색");
b4 = new Button("초록색");
/*각각의 버튼에 리스너를 달아줌(버튼은 ActionEvent가 발생하므로 해당 리스너를 선택해 달아줌)*/
// Button은 ActionEvent가 발생하는데, 이벤트 발생시 해당 이벤트 관련 객체가 만들어짐 new ActionEvent()
// Choice ItemEvent가 발생하면 new ItemEvent() 하면서 이벤트 객체가 생성됨
// Frame WindowEvent가 발생하면 new WindowEvent() 하면서 이벤트 객체가 생성됨
// this는 현재클래스를 의미하고 ActionEvent가 발생하면 이(this) 클래스에서 이벤트 핸들러를 찾아서 호출하라는 의미.
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
/*레이아웃 지정*/
setLayout(new FlowLayout());
/*프레임(컨테이너)에 버튼 추가*/
add(b1);
add(b2);
add(b3);
add(b4);
/*버튼의 색깔 변경*/
b1.setBackground(Color.yellow);
/*버튼의 글씨 변경*/
b2.setForeground(Color.RED);
b3.setForeground(Color.blue);
}
/*ActionListener 인터페이스를 상속받았기 때문에 미완성 메소드를 완성시켜줘야 함*/
@Override
public void actionPerformed(ActionEvent e) { // 파라미터로, 갑자기 만들어진 이벤트 객체를 받을 수 있도록 하는 구조. try-catch에서 catch문과 비슷함.
Object obj = e.getSource();
// 모든 버튼의 이벤트를 이 메소드가 다 받기 때문에 어느 컴포넌트로부터 발생한 이벤트인지 구분해서 처리해야함
if(obj == b1) {
setBackground(Color.yellow);
}else if (obj == b2){
setBackground(Color.RED);
}else if (obj == b3){
setBackground(Color.BLUE);
}else {
setBackground(Color.green);
}
System.out.println("actionPerformed");
}
}//Sub2
public class Ex12_03_ActionEvent {
public static void main(String[] args) {
Sub2 f = new Sub2("AWT예제");
f.setVisible(true);
}
}
선택박스에서 발생하는 이벤트 처리 예시
- Choice 박스는 선택하면 new ItemEvent 이벤트 객체를 발생시키고, 이를 계속 살펴주는건 ItemListener이다.
import java.awt.*;
import java.awt.event.*;
class Sub3 extends Frame implements ItemListener{
Choice ch;
Label lb;
Sub3(String title){
super(title);
setSize(300,200);
setVisible(true);
setLayout(new FlowLayout());
ch = new Choice(); // 선택박스, 선택시 new ItemEvent() 이벤트를 발생시킴
lb = new Label("가나다라마");
lb.setBackground(Color.PINK);
ch.addItemListener(this);
ch.add("진달래");
ch.add("장미");
ch.add("개나리");
ch.add("벚꽃");
add(ch);
add(lb);
}
@Override
public void itemStateChanged(ItemEvent e) {
System.out.println("choice 변화생김");
System.out.println(ch.getSelectedIndex() + "" + ch.getSelectedItem());
lb.setText(ch.getSelectedItem());
}
}
public class Ex12_04_Choice {
public static void main(String[] args) {
Sub3 s = new Sub3("Choice");
}
}
윈도우 창에서 발생하는 이벤트 처리 예시
import java.awt.*;
import java.awt.event.*;
class Sub6 extends Frame implements WindowListener{
Sub6(String title){
super(title);
setSize(300,200);
setVisible(true);
this.addWindowListener(this);
}
@Override
public void windowOpened(WindowEvent e) {
}
@Override
public void windowClosing(WindowEvent e) {
System.out.println("창이 닫힘");
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowIconified(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
System.out.println("11");
}
@Override
public void windowActivated(WindowEvent e) {
System.out.println("창이 활성화됨");
}
@Override
public void windowDeactivated(WindowEvent e) {
}
}
public class Ex12_06_WindowEvent {
public static void main(String[] args) {
new Sub6("WindowEvent");
}
}