13. Advanced GUI Components

46
13. Advanced GUI Component 13. Advanced GUI Component s s

description

13. JAVA GUI 13.1 GUI의 기본 요소 13.1.1 Canvas(캔버스) - 이미지 파일을 읽어서 디스플레이 - 이미지 파일을 읽어서 디스플레이 - 선이나 도형과 같은 그래픽 요소를 그리는 작업 생성자 public Canvas()

Transcript of 13. Advanced GUI Components

Page 1: 13. Advanced GUI Components

13. Advanced GUI Compone13. Advanced GUI Componentsnts

Page 2: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI

13.1 GUI 의 기본 요소

13.1.1 Canvas( 캔버스 )

- 이미지 파일을 읽어서 디스플레이

- 선이나 도형과 같은 그래픽 요소를 그리는 작업

생성자

public Canvas()

Page 3: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[ 예제 프로그램 ] import java.awt.*; import java.applet.*; public class CanvasDemo extends Applet { public void init() { super.init(); // Applet 의 init() 메소드 호출 setLayout(new GridLayout(1,1)); resize(350,200); MyCanvas c = new MyCanvas(); add(c); // 새로운 캔버스를 현 애플릿에 추가함 } } class MyCanvas extends Canvas { public void paint(Graphics g) { g.setColor(Color.green); g.fillOval(30,80,180,120); g.drawLine(10,10,280,150); g.fillRect(140,10,180,60); } }

Page 4: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI

13.1.2 Panel

- Panel 은 Container 로서 , GUI 컴포넌트들을 묶어 주는 역할

- Panel 안에 포함된 컴포넌트들을 별도의 Layout 사용

- Component 클래스와 Container 클래스의 후손 클래스

생성자

① public Panel()

- 패널을 생성한다 .

② public Panel(LayoutManger layout)

- 생성된 패널의 레이아웃 형식을 지정할 수 있다 .

Page 5: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[ 자바 예제 소스 ] import java.applet.*; import java.awt.*; public class PanelDemo extends Applet { public void init() { setLayout(new BorderLayout(2,4)); TextField tf = new TextField(20); add(tf, BorderLayout.NORTH); // 텍스트필드는 북쪽에 추가된다 . Panel c = new Panel(new GridLayout(2,3)); // 새로운 panel 생성 c.add(new Button("1")); // 다음 버튼들은 panel 에 주가됨 c.add(new Button("2")); c.add(new Button("3")); c.add(new Button("4")); c.add(new Button("5")); c.add(new Button("6")); c.setBackground(Color.yellow); //panel 의 백그라운드 색 지정 add(c, BorderLayout.CENTER); //panel 을 애플릿의 가운데에 부착

Page 6: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[ 자바 예제 소스 ] Panel e = new Panel(new GridLayout(2,1)); // 새로운 panel 생성 e.add(new Button("+")); // 다음 버튼들은 panel 에 추가됨 e.add(new Button("=")); e.setBackground(Color.white); add(e, BorderLayout.EAST); } }

Page 7: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[ 예제 프로그램 ] import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class Canvas2 extends Applet implements ActionListener { private Panel p; private CustomCanvas c; private Button circle, square; public void init() { c = new CustomCanvas(); // 캔버스를 생성하여 녹색 지정 c.setBackground( Color.green ); square = new Button( "Square" ); // Square 버튼 생성 square.addActionListener(this); circle = new Button( "Circle" ); // Circle 버튼 생성 circle.addActionListener(this); p = new Panel(); p.setLayout( new GridLayout( 2, 1 ) ); p.add( circle ); // panel p 에 “ circle" 버튼 추가 p.add( square ); // panel p 에 “ square" 버튼 추가

Page 8: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[ 예제 프로그램 ] setLayout( new BorderLayout() ); add( p, BorderLayout.WEST ); // 애플릿에 panel p 추가 add( c, BorderLayout.CENTER ); // 애플릿에 canvas c 추가 } public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); if(cmd.equals("Square")) { c.draw(CustomCanvas.SQUARE); } else { c.draw(CustomCanvas.CIRCLE); } } } class CustomCanvas extends Canvas { public final static int CIRCLE = 1, SQUARE = 2; private int shape; public void paint( Graphics g ) { if ( shape == CIRCLE ) g.fillOval( 50, 10, 60, 60 ); else if ( shape == SQUARE ) g.fillRect( 50, 10, 60, 60 ); } public void draw( int s ) { shape = s; repaint(); } }

Page 9: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI

13.2 이벤트 처리 모델   13.2.1 이벤트 (event) 다음의 사용자 행위가 이벤트에 해당 ①  마우스 클릭  ②  마우스 이동 ③  키보드 입력 ④  사용자 인터페이스 이벤트 

Page 10: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3 자바 1.1 이후 버전의 이벤트 처리 처리를 원하는 이벤트를 리스너 객체에 등록

( 예 )

public class buttonDemo extends Applet

implement ActionListener { // ActionListener 구현

public void init() {

Button b1;

b1 = new Button("One");

b1.addActionListener(this); // 액션 이벤트 등록

...

}

}

Page 11: 13. Advanced GUI Components

13.3.1 이벤트의 종류와 처리

Page 12: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3.2 ActionEvent 의 처리 - ActionEvent 의 처리

① 버튼 : 마우스로 버튼을 클릭

② 리스트 : 마우스로 리스트에 있는 아이템을 더블 클릭

③ MenuItem: 마우스로 메뉴를 선택

④ 텍스트 필드 : 텍스트 필드에서 엔터 키 입력

Page 13: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[ActionEvent 를 처리 예제 프로그램 ] public class ActionEvent1 extends java.applet.Applet implements ActionListener { Button b1, b2; TextField t1; List t2; Panel p; String msg = ""; public void init() { setLayout(new BorderLayout()); p = new Panel(new GridLayout(2, 2, 4, 2)); b1 = new Button("First"); b2 = new Button("Second"); t1 = new TextField(10); t2 = new List(3, true); t2.add("memory"); // List t2 에 item 추가 t2.add("disk"); t2.add("CPU"); t2.add("monitor"); t2.add("printer");

Page 14: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[ActionEvent 를 처리 예제 프로그램 ] b1.addActionListener(this); b2.addActionListener(this); t1.addActionListener(this); t2.addActionListener(this); p.add(b1); p.add(t1); p.add(b2); p.add(t2);

add(p, BorderLayout.NORTH); } public void actionPerformed(ActionEvent e) { msg = e.getActionCommand(); repaint(); } public void paint(Graphics g) { g.drawString(msg, 20, 150); } }

Page 15: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3.3 Adjustment 이벤트 - 스크롤 바 및 ScrollPane 객체에서 현재값이 바뀌게 될때

발생

- 이벤트 처리는 AdjustmentListener 구현 클래스의

adjustmentValueChanged(AdjustmentEvent e) 사용

class MyListener implements AdjustmentListener {

public void adjustmentValueChanged(AdjustmentEvent e) {

...... // 이벤트 발생시 , 수행할 코드

}

}

Page 16: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[Adjustment 이벤트 처리 예제 ] public class AdjustmentEventDemo extends java.applet.Applet { int h = Scrollbar.HORIZONTAL; int v = Scrollbar.VERTICAL; TextField tf = new TextField(28); Scrollbar s1 = new Scrollbar(h, 0, 10, 0, 400); Scrollbar s2 = new Scrollbar(v, 0, 10, 0, 100); public void init() { setLayout(new BorderLayout()); add(tf, BorderLayout.CENTER); add(s1, BorderLayout.SOUTH); add(s2, BorderLayout.EAST); s1.addAdjustmentListener(new MyListener()); s2.addAdjustmentListener(new MyListener());

Page 17: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[Adjustment 이벤트 처리 예제 ] class MyListener implements AdjustmentListener { public void adjustmentValueChanged(AdjustmentEvent e) { Scrollbar sbar = (Scrollbar) e.getAdjustable(); int e_type = e.getAdjustmentType(); int val = e.getValue(); String msg =""; switch(e_type) { case AdjustmentEvent.TRACK: msg = "Track Event "; break; case AdjustmentEvent.BLOCK_INCREMENT: msg = "Block Inc "; break; case AdjustmentEvent.BLOCK_DECREMENT: msg = "Block Dec "; break; case AdjustmentEvent.UNIT_INCREMENT: msg = "UNIT Inc "; break; case AdjustmentEvent.UNIT_DECREMENT: msg = "UNIT Dec "; }

Page 18: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[Adjustment 이벤트 처리 예제 ] if(sbar == s1) { tf.setText("horizontal bar: Event = " + msg + "Value=" + val); } else { tf.setText("vertical bar: Event = " + msg + "Value=" + val); } } } }

Page 19: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3.4 ItemEvent 의 처리- checkbox, choice, list 객체에서 항목을 선택시 발생

- ItemListener 인터페이스를 구현 클래스가 처리

- ItemStateChanged(ItemEvent e) 를 사용

class MyListener implements ItemListener {

public void itemStateChanged(ItemEvent e) {

... // 이벤트 발생시 , 수행할 코드

}

}

Page 20: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[ItemEvent 처리 예제 ] public class ItemEventDemo extends Applet implements ItemListener { Checkbox ch1, ch2; Choice c1; List st; TextField tf; String msg = ""; public void init() { setLayout(new GridLayout(3, 2)); ch1 = new Checkbox("One"); ch1.addItemListener(this); ch2 = new Checkbox("Two"); ch2.addItemListener(this); add(ch1); add(ch2); lst = new List(2, false); lst.addItemListener(this); lst.add("Pentium 100"); lst.add("Pentium 200"); lst.add("Celoron 333"); lst.add("Pentium II"); lst.add("Pentium III"); add(lst);

Page 21: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[ItemEvent 처리 예제 ] c1 = new Choice(); c1.addItemListener(this); c1.add("Memory"); c1.add("Printer"); c1.add("CPU"); c1.add("Disk"); add(c1); tf = new TextField(18); add(tf); } public void itemStateChanged(ItemEvent e) { if(e.getItemSelectable() instanceof List) msg = "List: "; else if (e.getItemSelectable() instanceof Choice) msg = "Choice: "; else { msg = "CheckBox: "; if(e.getStateChange()==ItemEvent.SELECTED) msg += "selected "; else msg += "de-selected "; } msg = msg + e.getItem(); tf.setText(msg); }}

Page 22: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3.5 마우스 이벤트

1) 마우스 클릭과 관련된 이벤트를 처리

☞ MouseListener 인터페이스를 구현

☞ MouseAdapter 클래스를 상속

2) 마우스 이동에 관련된 이벤트를 처리

☞ MouseMotionListener 인터페이스 구현

☞ MouseMotionAdapter 클래스를 상속

Page 23: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI MouseEvent 클래스에서 지원되는 메소드

① public void mousePressed(MouseEvent e)

- 마우스 커서가 컴포넌트 안에 있을 때 마우스 버튼을 눌렀을 때

- 이벤트 id: MOUSE_PRESSED

② public void mouseClicked(MouseEvent e)

- 마우스 커서를 컴포넌트 안에 정지시키고 , 버우스 버튼을 클릭하였을 때

- 이벤트 id: MOUSE_CLICKED

③ public void mouseReleased(MouseEvent e)

- 마우스를 drag 한 후 , 눌렀던 마우스 버튼을 놓았을 때

- 이벤트 id: MOUSE_RELEASED

④ public void mouseEntered(MouseEvent e)

- 마우스 커서가 컴포넌트 안으로 이동하였을 때

- 이벤트 id: MOUSE_ENTERED

Page 24: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI MouseEvent 클래스에서 지원되는 메소드 ⑤ public void mouseExited(MouseEvent e) - 마우스 커서가 컴포넌트 밖으로 이동하였을 때 - 이벤트 id: MOUSE_EXITED

MouseMotionEvent 의 메소드 ① public void mouseDragged(MouseEvent e) - 마우스 버튼을 누르고 마우스를 이동할 때 - 이벤트 id: MOUSE_DRAGGED ② public void mouseMoved(MouseEvent e) - 마우스가 이동하였을 때 - 이벤트 id: MOUSE_MOVED

Page 25: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[ 마우스 이벤트를 처리하는 예제 ] public class MouseEventDemo1 extends java.applet.Applet { TextField tf; public void init() { setLayout(new BorderLayout()); Canvas canvas = new Canvas(); add(canvas, BorderLayout.CENTER); canvas.addMouseListener(new mouseListener()); canvas.addMouseMotionListener(new mouseMotionListener()); tf = new TextField(); add(tf, BorderLayout.SOUTH); } class mouseListener implements MouseListener { // 내부클래스 정의 public void mouseClicked(MouseEvent e) { if(e.getModifiers()==InputEvent.BUTTON1_MASK) tf.setText("Left button Click : " + e.getX() + " , " + e.getY()); else tf.setText("Right button Click : " + e.getX() + " , " + e.getY()); }

Page 26: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[ 마우스 이벤트를 처리하는 예제 ] public void mouseEntered(MouseEvent e) { tf.setText("Mouse Enter : " + e.getX() + " , " + e.getY()); } public void mouseExited(MouseEvent e) { tf.setText("Mouse Exit : " + e.getX() + " , " + e.getY()); } public void mousePressed(MouseEvent e) { tf.setText("Mouse Press : " + e.getX() + " , " + e.getY()); } public void mouseReleased(MouseEvent e) { tf.setText("Mouse Release : " + e.getX() + " , " + e.getY()); } } class mouseMotionListener implements MouseMotionListener { public void mouseDragged(MouseEvent e) { tf.setText("Mouse Drag : " + e.getX() + " , " + e.getY()); } public void mouseMoved(MouseEvent e) { tf.setText("Mouse Move : " + e.getX() + " , " + e.getY()); } } }

Page 27: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI

Page 28: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3.6 키 이벤트 - KeyEvent 는 키보드로부터 입력이 일어날 때 발생 지원되는 상수값 KeyEvent.KEY_PRESSED 키가 눌러 졌을 때 KeyEvent.KEY_RELEASED 눌렀던 키를 놓았을 때 KeyEvent.KEY_TYPED 문자가 타이핑되었을 때 컴포넌트에서 발생하는 키 이벤트를 처리하기 위해서는 KeyListener

인 터 페 이 스 를 구 현 하 여야 한 다 . KeyListener 에 등 록 된 GUI 컴포넌트에서 키 이벤트가 발생 시에 다음의 메소드를 호출하게 된다 .

① void keyPressed(KeyEvent e) - 키보드에서 키를 눌렀을 때 ② void keyReleased(KeyEvent e) - 눌렀던 키를 놓았을 때 ③ void keyTyped(KeyEvent e) - 키보드에서 문자를 타이핑하였을 때

Page 29: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3.6 키 이벤트 o KeyEvent 클래스에서 지원되는 메소드 ① public int getKeyCode() - 키코드 값을 반환한다 . ② public char getKeyChar()

- 키보드 문자를 반환한다 .

Page 30: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[ 키보드 이벤트 처리 예제 ] import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class KeyEvent1 extends Applet implements KeyListener { private String line1 = ""; private String line2 = ""; public void init() { addKeyListener( this ); // 애플릿을 키 리스너에 등록 requestFocus(); } public void paint( Graphics g ) { g.drawString( line1, 25, 30 ); g.drawString( line2, 25, 48 ); } public void keyPressed( KeyEvent e ) { line1 = "Key pressed: " + e.getKeyText( e.getKeyCode() ); setLines2( e ); } public void keyReleased( KeyEvent e ) { line1 = "Key released: " + e.getKeyText( e.getKeyCode() ); setLines2( e ); }

Page 31: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[ 키보드 이벤트 처리 예제 ] public void keyTyped( KeyEvent e ) { line1 = "Key typed: " + e.getKeyChar(); setLines2( e ); } private void setLines2( KeyEvent e ) { String temp = e.getKeyModifiersText( e.getModifiers() ); line2 = "Modifier keys pressed: " + ( temp.equals( "" ) ? "none" : temp ); repaint(); } }

Page 32: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3.7 컴포넌트 이벤트 (ComponentEvent) - ComponentEvent 는 컴포넌트가 감춰지거나 , 다시 나타날 때 또는 크기가 조정될 때 발생하는 이벤트 - 지원되는 상수 COMPONENT_HIDDEN 컴포넌트가 감추어 질 때 COMPONENT_SHOWN 컴포넌트가 다시 나타날 때 COMPONENT_MOVED 컴포넌트가 이동하였을 때 COMPONENT_RESIZED 컴포넌트의 크기가 변하였을 때 - 지원되는 메소드 ① public Component getComponent() 컴포넌트 이벤트를 발생시킨 컴포넌트를 반환한다 .

Page 33: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3.7 컴포넌트 이벤트 (ComponentEvent) o 컴포넌트 이벤트 처리 - 지원되는 메소드 ① void componentHidden(ComponentEvent e) 컴포넌트가 감추졌을 때 호출된다 . ② void componentShown(ComponentEvent e) 컴포넌트가 나타났을 때 호출된다 . ③ void componentMoved(ComponentEvent e) 컴포넌트가 이동하였을 때 호출된다 . ④ void componentResized(ComponentEvent e) 컴포넌트의 크기가 변경되었을 때 호출된다 . o 컴포넌트 이벤트를 처리하는 클래스의 형식 class My_Component_Handler implements ComponentListener { public void componentHidden(ComponentEvent e) { // 컴포넌트가 감추어졌을 때 실행할 코드 } public void componentShown(ComponentEvent e) { // 컴포넌트가 나타났을 때 실행할 코드 } public void componentMoved(ComponentEvent e) { // 컴포넌트가 이동하였을 때 실행할 코드 } public void componentResized(ComponentEvent e) { // 컴포넌트의 크기가 변경되었을 때 실행할 코드 } }

Page 34: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3.9 윈도우 이벤트 - 지원되는 상수 WINDOW_ACTIVATED 윈도우가 활성화될 때 WINDOW_CLOSED 윈도우가 닫힐 때 WINDOW_CLOSING 사용자가 윈도우를 닫으려 할 때 WINDOW_ICONIFIED 윈도우가 아이콘으로 될 때 WINDOW_OPENED 윈도우가 열릴 때

o 윈도우 이벤트의 처리 - WindowListener 인터페이스 구현 클래스 정의 - addWindowListener() 메소드 사용하여 등록

Page 35: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3.9 윈도우 이벤트 o 지원되는 메소드 ① void windowActivated (WindowEvent e) 윈도우가 활성화되었을 때 호출된다 . ② void windowClosed(WindowEvent e) 윈도우가 닫혔을 때 호출된다 . ③ void windowClosing(WindowEvent e) 윈도우를 닫으려 할 때 호출된다 . ④ void windowDeactivated(WindowEvent e) 윈도우가 비활성화되었을 때 호출된다 . ⑤ void windowDeiconified(WindowEvent e) 윈도우가 아이콘에서 원래 상태로 되돌아왔을 때 호출된다 . ⑥ void windowIconified(WindowEvent e) 윈도우가 아이콘으로 변경되었을 때 호출된다 . ⑦ void windowOpened(WindowEvent e) 윈도우가 열렸을 때 호출된다 .

Page 36: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3.9 윈도우 이벤트 o 윈도우 이벤트 처리 형식 class My_window_handler implement WindowListener { public void windowActivated(WindowEvent e) { // 윈도우가 활성화되었을 때 실행할 코드 } public void windowClosed(WindowEvent e) { // 윈도우가 닫혔을 때 실행할 코드 } public void windowClosing(WindowEvent e) { // 윈도우가 닫으려고 할 때 실행할 코드 } public void windowDeactivated(WindowEvent e) { // 윈도우가 비 활성화되었을 때 실행할 코드 } public void windowDeiconified(WindowEvent e) { // 윈도우가 아이콘에서 본래 상태로 돌아왔을 때 실행할 코드 } public void windowIconified(WindowEvent e) { // 윈도우가 아이콘으로 되었을 때 실행할 코드 } public void windowOped(WindowEvent e) { // 윈도우가 열렸을 때 실행할 코드 } }

Page 37: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[윈도우이벤트 예제 프로그램 ] import java.awt.*; import java.awt.event.*; class Frame1 extends Frame { Frame1(String title) { super(title); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("Window is Closing"); dispose(); System.exit(0); } public void windowActivated(WindowEvent e) { System.out.println("Window Activated"); } public void windowDeactivated(WindowEvent e) { System.out.println("Window Deactivated"); } public void windowDeiconified(WindowEvent e) { System.out.println("Window Deiconified"); }

Page 38: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI[윈도우이벤트 예제 프로그램 ] public void windowIconified(WindowEvent e) { System.out.println("Window Iconified"); } }); } } public class WindowTest { public static void main(String args[]) { Frame1 f = new Frame1("My Frame"); f.show(); f.setSize(250, 200); } } [실행결과 ] C:\JAVA\NewBook\c13>java WindowTest Window Activated Window Iconified Window Deactivated Window Activated Window Deiconified Window Activated Window Deactivated Window Activated Window is Closing

Page 39: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3.10 별도의 Listener 구현 클래스 정의 - 이벤트 발생 클래스와 이벤트 처리 클래스를 별도로 정의하여 사용 - 동일한 기능을 수행하는 다음 두 예제 프로그램 비교

[ 예제 프로그램 1: 기존 방식 ] import java.awt.*; import java.awt.event.*; class ButtonPanel extends Panel implements ActionListener { Button yellowB,blueB; public ButtonPanel() { yellowB = new Button("Yellow"); blueB = new Button("Blue"); add(yellowB); add(blueB); yellowB.addActionListener(this); blueB.addActionListener(this); }

Page 40: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3.10 별도의 Listener 구현 클래스 정의 [ 예제 프로그램 1: 기존 방식 ] public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); Color color = getBackground(); if (source == yellowB) color = Color.yellow; else if (source == blueB) color = Color.blue; setBackground(color); repaint(); // paint with new Background } } public class EventTest extends Frame { public static void main(String[] args) { Frame fm = new EventTest(); fm.setTitle("Event Test"); fm.add(new ButtonPanel()); fm.setSize(200,200); fm.show(); } }

Page 41: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3.10 별도의 Listener 구현 클래스 정의 o 별도의 리스너 객체를 생성하여 등록하는 방법 [ 예제 프로그램 2] class MyListener implements ActionListener { Panel panel; MyListener(Panel p) { panel = p; } public void actionPerformed(ActionEvent evt) { Button s= (Button) evt.getSource(); Color color = panel.getBackground(); String str = s.getActionCommand(); if (str.equals("Yellow")) color = Color.yellow; else if (str.equals("Blue")) color = Color.blue; panel.setBackground(color); panel.repaint(); // paint with new Background } }

Page 42: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.3.10 별도의 Listener 구현 클래스 정의 o 별도의 리스너 객체를 생성하여 등록하는 방법 [ 예제 프로그램 2] class ButtonPanel extends Panel { Button yellowB,blueB; public ButtonPanel() { yellowB = new Button("Yellow"); blueB = new Button("Blue"); add(yellowB); add(blueB); MyListener listen = new MyListener(this); // 왜 this 를 넘길까 ? yellowB.addActionListener(listen); // 인자가 this 가 아님 blueB.addActionListener(listen); } } public class EventTest2 extends Frame { public static void main(String[] args) { Frame fm = new EventTest2(); fm.setTitle("Event Test"); fm.add(new ButtonPanel()); fm.setSize(200,200); fm.show(); }}

Page 43: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.4 어댑터 (Adaptor) 클래스 - 인터페이스는 구현 클래스에서 모든 메소드 재정의 요구 - 인터페이스에서 많은 메소드가 정의되면 , 귀찮음 - Adaptor 클래스 사용시 필요 클래스만 재정의

Page 44: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.4 어댑터 (Adaptor) 클래스 o Adaptor 예제 프로그램 [첫 번째 예제 프로그램 : Listener 인터페이스 사용 ] import java.awt.*; import java.awt.event.*; class ListenerTest extends Frame implements WindowListener { ListenerTest(String title) { super(title); addWindowListener(this); } public static void main(String args[]) { ListenerTest f = new ListenerTest("Listener"); f.setSize(300,200); f.show(); } public void windowActivated(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowClosing(WindowEvent e) { System.exit(0); // Make this program end }

Page 45: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.4 어댑터 (Adaptor) 클래스

o Adaptor 예제 프로그램

[첫 번째 예제 프로그램 : Listener 인터페이스 사용 ]

public void windowDeactivated(WindowEvent e) {}

public void windowDeiconified(WindowEvent e) {}

public void windowIconified(WindowEvent e) {}

public void windowOpened(WindowEvent e) {}

}

Page 46: 13. Advanced GUI Components

13. JAVA GUI13. JAVA GUI13.4 어댑터 (Adaptor) 클래스 o Adaptor 예제 프로그램 [두 번째 예제 프로그램 : Adaptor 클래스 사용 ] import java.awt.*; import java.awt.event.*; class MyAdapter extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } class AdapterTest extends Frame { AdapterTest(String title) { super(title); addWindowListener(new MyAdapter()); } public static void main(String args[]) { AdapterTest f = new AdapterTest("Adapter"); f.setSize(300, 200); f.show(); } }