Notice
Recent Posts
Recent Comments
관리 메뉴

Developer Gonie

[5주차] 94. AWT, "이벤트 처리방법1(리스너 implements)" Frame 클래스 외부 클래스에서 처리하는 방법 & 이벤트 종류 본문

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");
	}
}
Comments