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이 된다.