Java/Awt_Swing

AWT Window Event 처리 및 Anonymous 클래스 사용

krvision 2011. 12. 1. 22:37
/* 윈도우 창닫기 처리 방법
1> WindowListener 인터페이스를 상속받아 구현
2> WindowAdaper를 상속받아 이너클래스를 구현
3> Anonymous Class(이름없는 로컬 이너 클래스)로 구현(1회용)
   - 무명클래스, 무명안긴클래스...
*/
import java.awt.*;
import java.awt.event.*;

class  WinEvent3 extends Frame
{
		Button bt1, bt2;	
		public WinEvent3(){
			super("WinEvent3");
			setLayout(new FlowLayout());
			bt1 = new Button("Red");
			bt2 = new Button("Blue");
			add(bt1);
			add(bt2);
			// 실습문제 1) 각 버튼을 눌러 배경색이 바뀌게 이벤트 처리
			//  		단 Anonymous클래스로 이벤트 처리
			bt1.addActionListener(
				new ActionListener() {  
					public void actionPerformed(ActionEvent e) {
						setBackground(Color.red);
					}
				}
			);
			bt2.addActionListener(
				new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						setBackground(Color.blue);
					}
				}	
			);

			//Anonymous Class로 이벤트 처리...
			addWindowListener(new WindowAdapter() { 
				public void windowClosing(WindowEvent e) {
					System.exit(0);
				}
			});
		}// 생성자----------
		public static void main(String[] args) 
		{
			WinEvent3 we=new WinEvent3();
			we.setSize(300,300);
			we.setVisible(true);
		}
}
/////////////////////////////////////////////////////////////////////////
interface MyInter
{
	int VAR =10;
	void print();
}//////////////////////////
public class  AnonymousTest
{
	public static void main(String[] args) 
	{
		// MyInter 객체를 생성하면서 이름없는 클래스를 구성해보자
		// print()메소드 안에서 "Hello Java"를 찍도록....
		MyInter mi = new MyInter() {
			public void print() {
				System.out.println("Hello Java");
			}
		};
		mi.print();
	}
}

■  로컬 이너 클래스는
    a) 이름있는 로컬 이너 클래스
    b) 이름없는 로컬 이너 클래스
       로 구분할 수 있는데, 로컬 클래스는 지역변수와 비슷한 성격을 가지며,
       활용범위가 정의되는 메소드 블럭 내부로 제한 된다. 
      로컬 클래스는 외부(Outer)클래스의 멤버변수와, 메소드의 final 로컬변수,
      그리고 final 매개변수 의 사용이 가능하다.
      (로컬 클래스가 메소드의  지역변수 값을 변화시키지 않기 위해서...) 

a) 이름있는 로컬 이너 클래스의 경우   
   - 우선 정의를 한 다음에만 사용할 수 있다.
   - 다른 클래스의 상속이 불가능하다.
   - 컴파일 하면 OuterClass$숫자+로컬클래스명의 클래스 파일이 생성된다.
      여기서 숫자는 인덱스를 의미하는데, 서로 다른 메소드인 경우 동일 명칭의 클래스가
      존재할 수 있기 때문에 중간에 인덱스 역할의 숫자를 붙여 구분되도록 한다. 

b) 이름없는 로컬 이너 클래스(Anonymous 클래스)   
    - 이름을 갖지 않는 이너 클래스
    - 한번만 객체 생성이 가능하다.
    - 객체를 생성하는 문장 뒤에 클래스의 블럭 을 덧붙이는 방법으로 구성
    - new 키워드 뒤 생성자의 명칭이 기존 클래스명일 경우에는
       Anonymous클래스가 자동적으로 클래스의 자식 클래스가 되며, 
       인터페이스일 경우에는 이 인터페이스를 상속하는 클래스로서, 부모 클래스가 Object이 된다.