JAVA Programming 1 3 Mouse Event Action Event

  • Slides: 42
Download presentation
명품 JAVA Programming 1

명품 JAVA Programming 1

이벤트의 실제 예 3 마우스로 메뉴 선택 (Mouse Event, Action Event) 마우스로 버튼 클릭

이벤트의 실제 예 3 마우스로 메뉴 선택 (Mouse Event, Action Event) 마우스로 버튼 클릭 마우스로 (Mouse Event, 윈도우 크기 조절 Action Event) (Mouse Event, Container Event) 키보드 입력 (Key Event) 키보드로 메 뉴 선택 (Key Event, Action Event)

이벤트 객체 5 이벤트 객체란? � � 이벤트가 발생할 때, 발생한 이벤트에 관한 정보를

이벤트 객체 5 이벤트 객체란? � � 이벤트가 발생할 때, 발생한 이벤트에 관한 정보를 가진 객체 이벤트 리스너에 전달됨 이벤트 리스너 코드에서 이벤트가 발생한 상황을 파악할 수 있게 함 이벤트 객체의 종류 java. util. Event. Object Event. Objec t java. awt. AWTEvent List. Selection. Ev ent java. awt. event. * Action. Event Container. Eve nt Adjustment. Eve nt Component. Even t Focus. Event Input. Event Mouse. Even t Item. Event Paint. Event Key. Event javax. swing. event. List. Selection. Event Text. Event Window. Even t

이벤트 객체의 메소드 7 Event. Object get. Source() AWTEvent Action. Event Component. Event Item.

이벤트 객체의 메소드 7 Event. Object get. Source() AWTEvent Action. Event Component. Event Item. Event String get. Action. Command() Object get. Item() int get. State. Change() Input. Event int get. Modifiers() Mouse. Event int get. Button() int get. Click. Count() Point get. Point() int get. X() int get. Y() Key. Event char get. Key. Char() int get. Key. Code() String get. Key. Text()

이벤트 리스너 작성 예 import javax. swing. *; import java. awt. event. *; import

이벤트 리스너 작성 예 import javax. swing. *; import java. awt. event. *; import java. awt. *; 12 public class Listener. Sample extends JFrame { Listener. Sample () { set. Title("Action 이벤트 리스너 작성"); set. Layout(new Flow. Layout()); set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); Action 이벤트 리스너 객체 생성 Action 이벤트 리스너 등록 JButton btn = new JButton("Action"); My. Action. Listener listener = new My. Action. Listener (); btn. add. Action. Listener(listener ); add(btn); set. Size(300, 150); set. Visible(true); 이벤트 리스너 등록 } public static void main(String [] args) { new Listener. Sample (); } } class My. Action. Listener implements Action. Listener { public void action. Performed(Action. Event e) { 버튼의 JButton b = (JButton)e. get. Source(); 문자열 if(b. get. Text(). equals("Action")) 변경 b. set. Text("액션"); else b. set. Text("Action); } } 이벤트 리스너 구현

예제 10 -1 : 버튼이 Mouse 이벤트를 처리하는 예제 초기 상태 import javax. swing.

예제 10 -1 : 버튼이 Mouse 이벤트를 처리하는 예제 초기 상태 import javax. swing. *; import java. awt. event. *; import java. awt. *; public class Listener. Mouse. Ex extends JFrame { Listener. Mouse. Ex() { set. Title("버튼에 Mouse 이벤트 리스너 작성"); set. Layout(new Flow. Layout()); set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); JButton btn = new JButton("Mouse Event 테스트 버튼"); btn. set. Background(Color. YELLOW); My. Mouse. Listener listener = new My. Mouse. Listener(); btn. add. Mouse. Listener(listener); add(btn); set. Size(300, 150); set. Visible(true); 마우스가 버튼에 올라갈 때 13 마우스가 버튼에서 내려올 때 } } public static void main(String [] args) { new Listener. Mouse. Ex(); } class My. Mouse. Listener implements Mouse. Listener { public void mouse. Entered(Mouse. Event e) { JButton btn = (JButton)e. get. Source(); btn. set. Background(Color. RED); } public void mouse. Exited(Mouse. Event e) { JButton btn = (JButton)e. get. Source(); btn. set. Background(Color. YELLOW); } public void mouse. Pressed(Mouse. Event e) {} public void mouse. Released(Mouse. Event e) {} public void mouse. Clicked(Mouse. Event e) {} }

Tip : 리스너 등록 메소드가 add. XXXListener인 이유? 14 � 컴포넌트는 다른 이벤트에 대한

Tip : 리스너 등록 메소드가 add. XXXListener인 이유? 14 � 컴포넌트는 다른 이벤트에 대한 리스너를 동시에 가질 수 있다. � JButton. add. Action. Listener(); // Action 리스너 JButton. add. Key. Listener(); // Key 리스너 JButton. add. Focus. Listener(); // Focus 리스너 컴포넌트는 한 이벤트에 대해 여러 개의 리스너를 동시에 가질 수 있다. JButton. add. Action. Listener(new My. Button. Listener 1()); JButton. add. Action. Listener(new My. Button. Listener 2()); JButton. add. Action. Listener(new My. Button. Listener 3()); 이때, 리스너는 등록된 반대 순으로 모두 실행된다.

독립 클래스로 리스너 작성 import javax. swing. *; import java. awt. event. *; import

독립 클래스로 리스너 작성 import javax. swing. *; import java. awt. event. *; import java. awt. *; • 독립된 클래스로 Action 이벤트 리스너 작성 • 이 클래스를 별도의 My. Action. Listener. java파 일로 작성하여도 됨 16 public class Indep. Class. Listener extends JFrame { Indep. Class. Listener() { set. Title("Action 이벤트 리스너 작성"); set. Layout(new Flow. Layout()); set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); set. Size(300, 150); set. Visible(true); JButton btn = new JButton("Action"); My. Action. Listener listener = new My. Action. Listener(); btn. add. Action. Listener(listener); add(btn); } public static void main(String [] args) { new Indep. Class. Listener(); } } class My. Action. Listener implements Action. Listener { public void action. Performed(Action. Event e) { JButton b = (JButton)e. get. Source(); if(b. get. Text(). equals("Action")) b. set. Text("액션"); else b. set. Text("Action"); } }

내부 클래스로 리스너 작성 import javax. swing. *; import java. awt. event. *; import

내부 클래스로 리스너 작성 import javax. swing. *; import java. awt. event. *; import java. awt. *; • Action 이벤트 리스너를 내부 클래스로 작성 • private으로 선언하여 Inner. Class. Listener의 외 부에서 사용할 수 없게 함 public class Inner. Class. Listener extends JFrame { Inner. Class. Listener() { set. Title("Action 이벤트 리스너 작성"); set. Layout(new Flow. Layout()); set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); set. Size(300, 300); set. Visible(true); JButton btn = new JButton("Action"); btn. add. Action. Listener(new My. Action. Listener()); add(btn); } private class My. Action. Listener implements Action. Listener { public void action. Performed(Action. Event e) { JButton b = (JButton)e. get. Source(); if(b. get. Text(). equals("Action")) b. set. Text("액션"); else b. set. Text("Action"); } • 리스너에서 Inner. Class. Listener의 멤버에 대한 접근 용이 17 } // Inner. Class. Listener의 멤버나 JFrame의 멤버를 호출할 수 있음 set. Title(b. get. Text()); // JFrame. set. Title() 호출 } public static void main(String [] args) { new Inner. Class. Listener(); }

익명 클래스로 이벤트 리스너 작성 익명 클래스로 다시 작성된 결과 btn. add. Action. Listener(new

익명 클래스로 이벤트 리스너 작성 익명 클래스로 다시 작성된 결과 btn. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { JButton b = (JButton)e. get. Source(); if(b. get. Text(). equals("Action")) b. set. Text("액션"); else b. set. Text("Action"); // Anonymous. Class. Listener의 멤버나 // JFrame의 멤버를 호출할 수 있음 set. Title(b. get. Text()); } } ); import javax. swing. *; import java. awt. event. *; import java. awt. *; public class Anonymous. Class. Listener extends JFrame { Anonymous. Class. Listener() { set. Title("Action 이벤트 리스너 작성"); set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); set. Layout(new Flow. Layout()); set. Size(300, 300); set. Visible(true); JButton btn = new JButton("Action"); add(btn); btn. add. Action. Listener(new My. Action. Listener() ); } private class My. Action. Listener implements Action. Listener { public void action. Performed(Action. Event e) { JButton b = (JButton)e. get. Source(); if(b. get. Text(). equals("Action")) b. set. Text("액션"); else b. set. Text("Action"); } } 19 // Inner. Class. Listener의 멤버나 JFrame 멤버 호출 가능 set. Title(b. get. Text()); } public static void main(String [] args) { new Anonymous. Class. Listener (); } • 간단한 리스너의 경우 익명 클래스 사용 추천. • 메소드의 개수가 1, 2개인 리스너(Action. Listener, Item. Listener)에 대해 주로 사용

예제 10 -2의 소스 21 import javax. swing. *; import java. awt. event. *;

예제 10 -2의 소스 21 import javax. swing. *; import java. awt. event. *; import java. awt. *; 마우스 버튼이 눌러진 위치를 알아내어 la("hello" 문자열)를 그 위치로 옮긴다. class My. Mouse. Listener implements Mouse. Listener { public void mouse. Pressed(Mouse. Event e) { int x = e. get. X(); int y = e. get. Y(); la. set. Location(x, y); } public class Mouse. Listener. Ex extends JFrame { JLabel la; Mouse. Listener. Ex() { set. Title("Mouse 이벤트 예제"); set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); JPanel content. Pane = new JPanel(); set. Content. Pane(content. Pane); set. Layout(null); content. Pane. add. Mouse. Listener(new My. Mouse. Listener()); la = new JLabel("hello"); la. set. Size(50, 20); la. set. Location(30, 30); content. Pane. add(la); } set. Size(200, 200); set. Visible(true); } } public void mouse. Released(Mouse. Event e) {} mouse. Clicked(Mouse. Event e) {} mouse. Entered(Mouse. Event e) {} mouse. Exited(Mouse. Event e) {} public static void main(String [] args) { new Mouse. Listener. Ex(); }

어댑터 사용 예 24 JLabel la; JPanel content. Pane = new JPanel(); content. Pane.

어댑터 사용 예 24 JLabel la; JPanel content. Pane = new JPanel(); content. Pane. add. Mouse. Listener(new My. Mouse. Listener()); ……………. . JLabel la; JPanel content. Pane = new JPanel(); content. Pane. add. Mouse. Listener(new My. Mouse. Adapter()); ……………. . class My. Mouse. Listener implements Mouse. Listener { public void mouse. Pressed(Mouse. Event e) { int x = e. get. X(); int y = e. get. Y(); la. set. Location(x, y); } public void mouse. Released(Mouse. Event e) {} public void mouse. Clicked(Mouse. Event e) {} public void mouse. Entered(Mouse. Event e) {} public void mouse. Exited(Mouse. Event e) {} } class My. Mouse. Adapter extends Mouse. Adapter { public void mouse. Pressed(Mouse. Event e) { int x = e. get. X(); int y = e. get. Y(); la. set. Location(x, y); } } Mouse. Listener를 이용한 경우 Mouse. Adapter를 이용한 경우

예제 10 -3: Mouse. Adapter 사용하기 25 Mouse. Adapter를 이용하여 예제 10 -2를 수정하라.

예제 10 -3: Mouse. Adapter 사용하기 25 Mouse. Adapter를 이용하여 예제 10 -2를 수정하라. import javax. swing. *; import java. awt. event. *; import java. awt. *; public class Mouse. Adapter. Ex extends JFrame { JPanel content. Pane = new JPanel(); JLabel la; Mouse. Adapter. Ex() { set. Title("Mouse 이벤트 예제"); set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); set. Content. Pane(content. Pane); set. Layout(null); content. Pane. add. Mouse. Listener(new My. Mouse. Adapter()); la = new JLabel("hello"); la. set. Size(50, 20); la. set. Location(30, 30); content. Pane. add(la); set. Size(200, 200); set. Visible(true); } class My. Mouse. Adapter extends Mouse. Adapter { public void mouse. Pressed(Mouse. Event e) { int x = e. get. X(); int y = e. get. Y(); la. set. Location(x, y); } } } public static void main(String [] args) { new Mouse. Adapter. Ex(); }

Key. Listener의 메소드와 키 31

Key. Listener의 메소드와 키 31

Key. Event와 Key. Listener의 활용 : get. Key. Code(), get. Key. Char(), get. Key.

Key. Event와 Key. Listener의 활용 : get. Key. Code(), get. Key. Char(), get. Key. Text() 사용 import javax. swing. *; import java. awt. event. *; import java. awt. *; public class Key. Listener. Ex extends JFrame { JPanel content. Pane = new JPanel(); JLabel [] key. Message; Key. Listener. Ex() { set. Title("Key. Listener 예제"); set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); } class My. Key. Listener extends Key. Adapter { public void key. Pressed(Key. Event e) { int key. Code = e. get. Key. Code(); char key. Char = e. get. Key. Char(); key. Message[0]. set. Text(Integer. to. String(key. Code)); key. Message[1]. set. Text(Character. to. String(key. Char)); key. Message[2]. set. Text(e. get. Key. Text(key. Code)); } } set. Content. Pane(content. Pane); content. Pane. add. Key. Listener(new My. Key. Listener()); key. Message = new JLabel [3]; key. Message[0] = new JLabel(" get. Key. Code() "); key. Message[1] = new JLabel(" get. Key. Char() "); key. Message[2] = new JLabel(" get. Key. Text() "); for(int i=0; i<key. Message. length; i++) { content. Pane. add(key. Message[i]); key. Message[i]. set. Opaque(true); key. Message[i]. set. Background(Color. CYAN); } 32 set. Size(300, 150); set. Visible(true); content. Pane. request. Focus(); } public static void main(String [] args) { new Key. Listener. Ex(); } • JComponent 컴포넌트에 바탕색을 지정하기 위 해서는 사전에 컴포넌트가 불투명함을 지정하여야 한다.

예제 10 -4 : F 1 키를 입력받으면 바탕을 초록색으로, % 키 를 입력받으면

예제 10 -4 : F 1 키를 입력받으면 바탕을 초록색으로, % 키 를 입력받으면 바탕을 노란색으로 변경 34 import javax. swing. *; import java. awt. event. *; import java. awt. *; public class Key. Code. Ex extends JFrame { JPanel content. Pane = new JPanel(); JLabel la = new JLabel(); Key. Code. Ex() { set. Title("Key Code 예제 : F 1키: 초록색, % 키 노란색"); set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); } set. Content. Pane(content. Pane); content. Pane. add. Key. Listener(new My. Key. Listener()); content. Pane. add(la); set. Size(300, 150); set. Visible(true); content. Pane. request. Focus(); • JPanel이 키 입력을 받을 수 있도록 포 커스를 준다. } class My. Key. Listener extends Key. Adapter { public void key. Pressed(Key. Event e) { la. set. Text(e. get. Key. Code())); if(e. get. Key. Char() == '%') content. Pane. set. Background(Color. YELLOW); else if(e. get. Key. Code() == Key. Event. VK_F 1) content. Pane. set. Background(Color. GREEN); } } public static void main(String [] args) { new Key. Code. Ex(); } • % 키를 판별하기 위해 e. get. Key. Char() 이용 • '%' 문자와 비교 • F 1 키를 판별하기 위해 e. get. Key. Code() 이용 • Key. Event. VK_F 1 값과 비교

예제 소스: 상, 하, 좌, 우 키로 텍스트 움직이기 37 import javax. swing. *;

예제 소스: 상, 하, 좌, 우 키로 텍스트 움직이기 37 import javax. swing. *; import java. awt. event. *; import java. awt. *; class My. Key. Listener extends Key. Adapter { public void key. Pressed(Key. Event e) { int key. Code = e. get. Key. Code(); switch(key. Code) { case Key. Event. VK_UP: la. set. Location(la. get. X(), la. get. Y()-FLYING_UNIT); break; case Key. Event. VK_DOWN: la. set. Location(la. get. X(), la. get. Y()+FLYING_UNIT); break; case Key. Event. VK_LEFT: la. set. Location(la. get. X()-FLYING_UNIT, la. get. Y()); break; case Key. Event. VK_RIGHT: la. set. Location(la. get. X()+FLYING_UNIT, la. get. Y()); break; } } } public class Flying. Text. Ex extends JFrame { JPanel content. Pane = new JPanel(); JLabel la = new JLabel("HELLO"); final int FLYING_UNIT = 10; Flying. Text. Ex() { set. Title("상, 하, 좌, 우 키를 이용하여 텍스트 움직이기"); set. Default. Close. Operation( JFrame. EXIT_ON_CLOSE); } set. Content. Pane(content. Pane); content. Pane. set. Layout(null); content. Pane. add. Key. Listener(new My. Key. Listener()); la. set. Location(50, 50); la. set. Size(100, 20); content. Pane. add(la); set. Size(300, 300); set. Visible(true); content. Pane. request. Focus(); } public static void main(String [] args) { new Flying. Text. Ex(); }

Mouse. Event로부터 얻을 수 있는 정보 39 마우스 포인터의 위치 � � 입력된 마우스

Mouse. Event로부터 얻을 수 있는 정보 39 마우스 포인터의 위치 � � 입력된 마우스 버튼 � short get. Button() 마우스 클릭 횟수 � int get. X(), int get. Y(), Point get. Point() int get. Click. Count() 팝업 메뉴 클릭 � boolean is. Popup. Trigger() public void mouse. Pressed(Mouse. Event e) { int x = e. get. X(); int y = e. get. Y(); } public void mouse. Pressed(Mouse. Event e) { if(e. get. Button() == Mouse. Event. BUTTON 1) System. out. println("Left Button Pressed"); } public void mouse. Clicked(Mouse. Event e) { if(e. get. Click. Count() == 2) { // 더블클릭을 처리하는 루틴 } }

Mouse. Listener와 Mouse. Motion. Listener 사용 import javax. swing. *; import java. awt. event.

Mouse. Listener와 Mouse. Motion. Listener 사용 import javax. swing. *; import java. awt. event. *; import java. awt. *; class My. Mouse. Listener implements Mouse. Listener, Mouse. Motion. Listener { public void mouse. Pressed(Mouse. Event e) { la. set. Text("Mouse. Pressed ("+e. get. X()+", "+e. get. Y()+")"); } public void mouse. Released(Mouse. Event e) { la. set. Text("Mouse. Released("+e. get. X()+", "+e. get. Y()+")"); } public void mouse. Clicked(Mouse. Event e) {} public void mouse. Entered(Mouse. Event e) { JPanel p = (JPanel)e. get. Source(); p. set. Background(Color. CYAN); } public void mouse. Exited(Mouse. Event e) { JPanel p = (JPanel)e. get. Source(); p. set. Background(Color. YELLOW); } public void mouse. Dragged(Mouse. Event e) { la. set. Text("Mouse. Dragged ("+e. get. X()+", "+e. get. Y()+")"); } public void mouse. Moved(Mouse. Event e) { la. set. Text("Mouse. Moved ("+e. get. X()+", "+e. get. Y()+")"); } } public class Mouse. Listener. All. Ex extends JFrame { JPanel content. Pane = new JPanel(); JLabel la; "); Mouse. Listener. All. Ex() { set. Title("Mouse. Listener와 Mouse. MOtion. Listener 예제 } 40 set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); set. Content. Pane(content. Pane); content. Pane. add. Mouse. Listener( new My. Mouse. Listener()); content. Pane. add. Mouse. Motion. Listener( new My. Mouse. Listener()); la = new JLabel("No Mouse Event"); content. Pane. add(la); set. Size(300, 200); set. Visible(true); } public static void main(String [] args) { new Mouse. Listener. All. Ex(); }

예제 10 -6 : 더블클릭 시 컨텐트팬의 배경색 변경 더블클릭할 때마다 컨텐트팬의 배경색을 랜덤하게

예제 10 -6 : 더블클릭 시 컨텐트팬의 배경색 변경 더블클릭할 때마다 컨텐트팬의 배경색을 랜덤하게 변경한다. import javax. swing. *; import java. awt. event. *; import java. awt. *; public class Click. And. Double. Click. Ex extends JFrame { JPanel content. Pane = new JPanel(); Click. And. Double. Click. Ex() { set. Title("Click and Double. Click 예제"); set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); set. Content. Pane(content. Pane); content. Pane. add. Mouse. Listener(new My. Mouse. Listener()); set. Size(300, 200); set. Visible(true); } class My. Mouse. Listener extends Mouse. Adapter { public void mouse. Clicked(Mouse. Event e) { if(e. get. Click. Count() == 2) { int r = (int)(Math. random()*256); int g = (int)(Math. random()*256); int b = (int)(Math. random()*256); } 42 } } JPanel p = (JPanel)e. get. Source(); p. set. Background(new Color(r, b, g)); } public static void main(String [] args) { new Click. And. Double. Click. Ex(); }