Microsoft PowerPoint - java1-lecture10.ppt [호환 모드]

Similar documents
PowerPoint Presentation

gnu-lee-oop-kor-lec10-1-chap10

<4D F736F F F696E74202D20C1A63138C0E520C0CCBAA5C6AE20C3B3B8AE28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

(Microsoft PowerPoint - java1-lecture7.ppt [\310\243\310\257 \270\360\265\345])

10장.key

오버라이딩 (Overriding)

9장.key

<4D F736F F F696E74202D20C1A63230C0E520BDBAC0AE20C4C4C6F7B3CDC6AE203128B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

Microsoft PowerPoint - java2-lecture5.ppt [호환 모드]

Microsoft PowerPoint - EEL2 Lecture10 -Swing and Event Handling.pptx

Microsoft PowerPoint - 06-Chapter09-Event.ppt

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

11장.key

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

public class FlowLayoutPractice extends JFrame { public FlowLayoutPractice() { super("flowlayout Practice"); this. Container contentpane = getcontentp

강의자료

No Slide Title

Cluster management software

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

(Microsoft PowerPoint - LZVNQBAJWGTC.ppt [\310\243\310\257 \270\360\265\345])

제8장 자바 GUI 프로그래밍 II

No Slide Title

PowerPoint Presentation

Microsoft PowerPoint - 14주차 강의자료

자바GUI실전프로그래밍2_장대원.PDF

PowerPoint 프레젠테이션

Microsoft PowerPoint - [JAVA프로그래밍]9장GUI

Microsoft PowerPoint - Java-03.pptx

모든스윙컴포넌트에는텍스트옆에이미지를추가로표시할수있다. ImageIcon image = new ImageIcon("image.gif"); JLabel label = new JLabel(" 이미지레이블 "); label.seticon(image);

Microsoft PowerPoint - 04-UDP Programming.ppt

슬라이드 1

PowerPoint 프레젠테이션

<4D F736F F F696E74202D205B4A415641C7C1B7CEB1D7B7A1B9D65D3130C0E5C0CCBAA5C6AEC3B3B8AE>

Microsoft PowerPoint - java1-lecture11.ppt [호환 모드]

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

Java Programing Environment

슬라이드 1

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - ÀÚ¹Ù08Àå-2.ppt

PowerPoint 프레젠테이션

10 이벤트 처리와 그래픽 프로그래밍.key

운동시뮬레이션 강의 소개

Microsoft PowerPoint - 10장

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA PROGRAMMING 실습 08.다형성

중간고사

Microsoft PowerPoint 자바-AWT컴포넌트(Ch8).pptx

Microsoft Word - java18-1-final-answer.doc

PowerPoint Presentation

Cluster management software

PowerPoint Presentation

05-class.key

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint Presentation

gnu-lee-oop-kor-lec06-3-chap7

Microsoft PowerPoint - java1-lecture11.ppt [호환 모드]

자바로

제8장 자바 GUI 프로그래밍 II

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

JTable과 MVC(Model-View-Controller) 구조 - 모델-뷰-컨트롤러구조는데이터의저장과접근에대한제공은모델이담당하고, 화면표시는뷰, 이벤트의처리는컨트롤러가하도록각역할을구분한구조이다. 즉, 역할의분담을통하여상호간의영향을최소화하고각요소의독립성을보장하여독자

JMF3_심빈구.PDF

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Chap12

PowerPoint Presentation

11-GUI.key

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

어댑터뷰

PowerPoint Presentation

Microsoft PowerPoint - lec09_12.ppt [호환 모드]

PowerPoint Presentation

DB 에데이터저장을위한입력창설계 - JLabel, JTextField, JButton 을이용한입력창설계 - 2 -

Microsoft Word - java19-1-final-answer.doc

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

10-Java Applet

ch09

연습문제이론홀수정답

Cluster management software

웹연동 } 웹 (Web) 환경에서데이터베이스시스템을연동하는방법은다음과같다 } Server Client 구조의통신 (2-Tier) } Server Middleware Client 구조의통신 (3-Tier) 2

PowerPoint Presentation

Network Programming

(Microsoft PowerPoint - java2-lecture6.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - Java7.pptx

쉽게 풀어쓴 C 프로그래밍

PowerPoint Template

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밊

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

제11장 프로세스와 쓰레드

歯NetworkKawuiBawuiBo.PDF

제13강. 스윙(Swing)

PowerPoint 프레젠테이션

Design Issues

Transcription:

그래픽사용자인터페이스 그래픽사용자인터페이스이벤트객체, 리스너 그래픽사용자인터페이스 (Graphical User Interface, 간단히 GUI) 는컴포넌트들로구성된다. 514760-1 2018 년봄학기 5/15/2018 박경신 자바에서 GUI 의종류 AWT(Abatract Windows Toolkit) 운영체제가제공하는자원을이용하여서컴포넌트를생성한다. SWING 스윙컴포넌트가자바로작성되어있기때문에어떤플랫폼에서도일관된화면을보여줄수있다. AWT 와 SWING 컴포넌트 AWT 버전 스윙버전 버튼 Button JButton 레이블 Label JLabel 리스트 List JList 패스워드필드 없음 JPasswordField 슬라이더없음 JSlider

SWING 클래스계층구조 SWING 의특징 스윙 GUI 컴포넌트 형식화된텍스트입력이나패스워드필드동작과같은복잡한기능들이제공 자바 2D API 그림이나이미지, 애니메이션기능을제공 교체가능한룩앤필 (Look-and-Feel) 지원 데이터전송 자르기, 복사, 붙이기, 드래그앤드롭등의데이터전송기능제공 되돌리기 (undo) 와되풀이 (redo) 기능을손쉽게제공 스윙패키지 컨테이너와컴포넌트 기본컴포넌트 JButton, JLabel, JCheckbox, JChoice, JList, JMenu, JTextField, JScrollbar, JTextArea, JCanvas 등이여기에속한다. 컨테이너컴포넌트 다른컴포넌트를안에포함할수있는컴포넌트로서 JFrame, JDialog, JApplet, JPanel, JScrollPane 등이여기에속한다.

컨테이너의종류 최상위컨테이너 절대다른컨테이너안에포함될수없는컨테이너를의미한다. 프레임 (JFrame), 다이알로그 (JDialog), 애플릿 (JApplet) 등이여기에해당된다. 일반컨테이너 다른컨테이너안에포함될수있는컨테이너로패널 (JPanel), 스크롤페인 (JScrollPane) 등을의미한다. 프레임생성 #1 import javax.swing.*; public class FrameTest { JFrame f = new JFrame("Frame Test"); f.setsize(300, 200); f.setdefaultcloseoperation(jframe.exit_on_close); f. JFrame 의객체생성 프레임생성 #2 import javax.swing.*; public class MyFrame extends JFrame { setsize(300, 200); setdefaultcloseoperation(jframe.exit_on_close); settitle("myframe"); public class MyFrameTest { MyFrame f = new MyFrame(); Jframe 을상속하여서 MyFrame 을정의 MyFrame 의객체생성 컴포넌트생성과추가 import javax.swing.*; import java.awt.flowlayout; 배치관리자설정! public class MyFrame extends JFrame { setsize(300, 200); setdefaultcloseoperation(jframe.exit_on_close); settitle("myframe"); 컴포넌트생성및추가 setlayout(new FlowLayout()); JButton button = new JButton(" 버튼 "); this.add(button); public class MyFrameTest { MyFrame f = new MyFrame();

JFrame 클래스 컨테이너는컴포넌트들을트리 (tree) 형태로저장한다. 최상위컨테이너는이트리의루트노드가된다. 최상위컨테이너는내부에콘텐트페인 (content pane) 을가지고있다. 여기에화면에보이는컴포넌트를저장한다. 최상위컨테이너에는메뉴바를추가할수있다. JFrame 클래스주요메소드 setlocation(x, y), setbounds(x, y, width, height), setsize(width, height) 프레임의위치와크기를설정한다. seticonimage(iconimage) 윈도우시스템에타이틀바, 태스크스위처에표시할아이콘을알려준다. settitle() 타이틀바의제목을변경한다. setresizable(boolean) 사용자가크기를조절할수있는지를설정한다. 기본컴포넌트 패널 (panel) 레이블 (label) 버튼 (button) 텍스트필드 (text field) 버튼의종류 JButton - 가장일반적인버튼 JCheckBox - 체크박스버튼 JRadioButton - 라디오버튼은그룹중하나의버튼만체크할수있다.

LAB: 온도변환기 public class TemperatureConverter { JFrame f = new JFrame(); JPanel panel = new JPanel(); f.add(panel); JLabel label1 = new JLabel(" 화씨온도 "); JLabel label2 = new JLabel(" 섭씨온도 "); JTextField field1 = new JTextField(15); JTextField field2 = new JTextField(15); JButton button = new JButton(" 변환 "); panel.add(label1); panel.add(field1); panel.add(label2); panel.add(field2); panel.add(button); f.setsize(300, 150); f.setdefaultcloseoperation(jframe.exit_on_close); f.settitle(" 온도변환기 "); f. LAB: 피자주문화면 패널안에다른패널이포함될수있다. 이것을이용하여서다음그림처럼프로그램의화면을디자인하라. 패널 패널 A 패널 B 프레임 public class MyFrame extends JFrame { setsize(600, 150); setdefaultcloseoperation(jframe.exit_on_close); settitle("myframe"); JPanel panel = new JPanel(); JPanel panela = new JPanel(); JPanel panelb = new JPanel(); JLabel label1 = new JLabel(" 자바피자에오신것을환영합니다. 피자의종류를선택하시오."); panela.add(label1); JButton button1 = new JButton(" 콤보피자 "); JButton button2 = new JButton(" 포테이토피자 "); JButton button3 = new JButton(" 불고기피자 "); panelb.add(button1); panelb.add(button2); panelb.add(button3); JLabel label2 = new JLabel(" 개수 "); JTextField field1 = new JTextField(10); panelb.add(label2); panelb.add(field1); panel.add(panela); panel.add(panelb); add(panel); public class MyFrameTest { MyFrame f = new MyFrame(); 배치관리자의종류 FlowLayout GridBagLayout GridLayout

배치관리자의종류 배치관리자의설정 BorderLayout 1. 생성자를이용하는방법 JPanel panel = new JPanel(new BorderLayout()); 2. setlayout() 메소드이용 panel.setlayout(new FlowLayout()); BoxLayout CardLayout 프로그래머가컴포넌트의크기와힌트를배치관리자에게주고싶은경우에는 setminimumsize(), setpreferredsize(), setmaximumsize() 메소드를사용 button.setmaximumsize(new Dimension(300, 200)); // 최대크기힌트 button.setalignmentx(jcomponent.center_alignment); // 중앙정렬힌트 BorderLayout 클래스 GridLayout 클래스 생성자또는메소드 BorderLayout(int hgap, int vgap) 설명 컴포넌트사이의수평간격 hgap과수직간격 vgap을을가지는 BorderLayout 객체생성 생성자 GridLayout(int rows, int cols) 설명 rows 행과 cols 열을가지는 GridLayout 객체를생성한다. 만약 rows나 cols가 0이면필요 sethgap(int) 컴포넌트사이의수평간격설정 ( 단위는픽셀 ) 한만큼의행이나열이만들어진다. setvgap(int) 컴포넌트사이의수직간격설정 GridLayout(int rows, int cols, int hgap, int rows 행과 cols 열을가지는 GridLayout 객체를생성한다. hgap과 vgap은컴포넌트사이 vgap) 의수평간격과수직간격으로단위는픽셀이 다.

절대위치로배치하기 1. 배치관리자를 null 로설정한다. setlayout(null); 2. add() 메소드를사용하여컴포넌트를컨테이너에추가한다. Button b = Button("Absolute Position Button"); add(b); 3. setbounds() 메소드를사용하여절대위치와크기를지정한다. b.setbounds(x, y, w, h); 4. 컴포넌트의 repaint() 메소드를호출한다. b.repaint(); import java.awt.*; import java.awt.event.*; import javax.swing.*; class MyFrame extends JFrame { JButton b1; private JButton b2, b3; settitle("absolute Position Test"); setdefaultcloseoperation(jframe.exit_on_close); setsize(300, 200); JPanel p = new JPanel(); p.setlayout(null); b1 = new JButton("Button #1"); p.add(b1); b2 = new JButton("Button #2"); p.add(b2); b3 = new JButton("Button #3"); p.add(b3); b1.setbounds(20, 5, 95, 30); b2.setbounds(55, 45, 105, 70); b3.setbounds(180, 15, 105, 90); add(p); public class AbsoluteTest { public static void main(string args[]) { MyFrame f=new MyFrame(); public class Calculator extends JFrame { private JPanel panel; private JTextField tfield; private JButton[] buttons; private String[] labels = { "Backspace", "", "", "CE", "C", "7", "8", "9", "/", "sqrt", "4", "5", "6", "x", "%","1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" ; public Calculator() { tfield = new JTextField(35); panel = new JPanel(); tfield.settext("0."); tfield.setenabled(false); panel.setlayout(new GridLayout(5, 5, 3, 3)); buttons = new JButton[25]; int index = 0; for (int rows = 0; rows < 5; rows++) { for (int cols = 0; cols < 5; cols++) { buttons[index] = new JButton(labels[index]); if( cols >= 3 ) buttons[index].setforeground(color.red); else buttons[index].setforeground(color.blue); buttons[index].setbackground(color.yellow); panel.add(buttons[index]); index++; add(tfield, BorderLayout.NORTH); add(panel, BorderLayout.CENTER); pack(); public static void main(string args[]) { Calculator s = new Calculator(); 이벤트 - 구동프로그래밍 이벤트 - 구동프로그래밍 (event-driven programming): 프로그램의실행이이벤트의발생에의하여결정되는방식

이벤트처리과정 이벤트리스너 발생된이벤트객체에반응하여서이벤트를처리하는객체를이벤트리스너 (event listener) 라고한다. 이벤트처리과정 1. 이벤트리스너클래스를작성한다. class MyListener implements ActionListener { public void actionperformed(actionevent e) { 이벤트객체 EventObject 클래스를상속받는다. Ex: MouseEvent 클래스 // Action 이벤트를처리하는코드가여기에들어간다. 2. 이벤트리스너를이벤트소스에등록한다. public class MyFrame extends JFrame { // 생성자에서컴포넌트를생성하고추가한다. button = new JButton(" 동작 ); // 버튼생성 button.addactionlistener(new MyListener()); 이벤트리스너를 컴포넌트에붙인다. 이벤트를발생시킨이벤트소스등의여러가지정보를제공한다. public void actionperformed(actionevent e) { button = (JButton)e.getSource();

이벤트처리기작성방법 1. 독립적인클래스로이벤트처리기를작성 2. 내부클래스로이벤트처리기를작성 3. 프레임클래스에이벤트처리를구현 4. 무명클래스를사용하는방법 5. 람다식을이용하는방법 독립적인클래스작성 import javax.swing.*; import java.awt.event.*; class MyListener implements ActionListener { public void actionperformed(actionevent e) { JButton button = (JButton) e.getsource(); button.settext(" 마침내버튼이눌려졌습니다."); class MyFrame extends JFrame { private JButton button; private JLabel label; this.setsize(300, 200); this.setdefaultcloseoperation(jframe.exit_on_close); this.settitle(" 이벤트예제 "); JPanel panel = new JPanel(); button = new JButton(" 버튼을누르시오 "); label = new JLabel(" 아직버튼이눌려지지않았습니다 "); button.addactionlistener(new MyListener()); panel.add(button); panel.add(label); this.add(panel); this. public class ActionEventTest1 { MyFrame t = new MyFrame(); 내부클래스방법 만약 MyListener라는클래스를별도의클래스로하면 MyFrame 안의멤버변수들을쉽게사용할수없다. 일반적으로 MyListener 클래스를내부클래스로만든다. MyFrame 에서이벤트도처리하는방법 더많이사용되는방법은 MyFrame 클래스가 JFrame 을상속받으면서동시에 ActionListener 인터페이스도구현하는경우이다. class MyFrame extends JFrame { private class MyListener implements ActionListener { public void actionperformed(actionevent e) { if (e.getsource() == button) { label.settext(" 마침내버튼이눌려졌습니다."); public class ActionEventTest { MyFrame t = new MyFrame(); 내부클래스 label 에접근할수있다. class MyFrame extends JFrame implements ActionListener { button = new JButton(" 버튼을누르시오 "); label = new JLabel(" 아직버튼이눌려지지않았습니다 "); button.addactionlistener(this); public void actionperformed(actionevent e) { if (e.getsource() == button) { label.settext(" 마침내버튼이눌려졌습니다."); 이벤트도처리

무명클래스를사용하는방법 람다식을이용하는방법 class MyFrame extends JFrame { button = new JButton(" 버튼을누르시오 "); button.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { if (e.getsource() == button) { label.settext(" 마침내버튼이눌려졌습니다."); ); 안드로이드에서많이사용된다! import javax.swing.*; class MyFrame extends JFrame { private JButton button; private JLabel label; this.setsize(300, 200); this.setdefaultcloseoperation(jframe.exit_on_close); this.settitle(" 이벤트예제 "); JPanel panel = new JPanel(); button = new JButton(" 버튼을누르시오 "); label = new JLabel(" 아직버튼이눌려지지않았습니다 "); button.addactionlistener(e -> { label.settext(" 마침내버튼이눌려졌습니다."); ); panel.add(button); panel.add(label); this.add(panel); this. Slider 예제 Slider 예제 JLabel, JSlider 를이용한슬라이더값을레이블에출력하는간단한 GUI 를구현한다. public class MainFrame extends JFrame { JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 100, 10); JLabel label = new JLabel("Value : ", JLabel.CENTER); Controller slider label MainFrame slider.statechanged View slider.addchangelistener(new ChangeListener() { public void statechanged(changeevent e) { label.settext("value : " + ((JSlider)e.getSource()).getValue()); ); statechanged

Slider ChangeListener, KeyListener, ActionListener 예제 Slider ChangeListener, KeyListener, ActionListener 예제 JLabel, JSlider, JTextField, JButton 를이용한슬라이더값을텍스트필드에출력하는, 버튼으로종료하는간단한 GUI 를구현한다. public class MainFrame extends JFrame implements ChangeListener, KeyListener, ActionListener { JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 100, 10); JLabel label = new JLabel("Value : ", JLabel.CENTER); JTextField textfield = new JTextField("10", 20); JButton button = new JButton("Close"); public void statechanged(changeevent e) {.. public void keytyped(keyevent e) {.. public void keypressed(keyevent e) {.. public void keyreleased(keyevent e) {.. public void actionperformed(actionevent e) {.. Controller slider label textfield button statechanged keyreleased actionperformed MainFrame textfield.keyreleased slider.statechanged button.actionperformed View Slider ChangeListener, KeyListener, ActionListener 예제 이벤트의분류 public void statechanged(changeevent e) { textfield.settext("" + ((JSlider)e.getSource()).getValue()); // int -> String public void keytyped(keyevent e) { public void keypressed(keyevent e) { public void keyreleased(keyevent e) { int key = e.getkeycode(); if (key == KeyEvent.VK_ENTER) { Toolkit.getDefaultToolkit().beep(); System.out.println("ENTER pressed"); JTextField textfield = (JTextField) e.getsource(); int value = Integer.parseUnsignedInt(textfield.getText()); // String -> int slider.setvalue(value); 스윙컴포넌트에의하여지원되는이벤트는크게두가지의카테고리로나누어진다.

저수준이벤트 의미적이벤트 이벤트발생원의식별 getsource() 메소드를이용하여이벤트를발생시킨객체를식별한다. getid() 메소드를이용하여이벤트의타입을식별한다. getactioncommand() 메소드를이용하여이벤트를발생시킨컴포넌트이름을식별한다. public void actionperformed(actionevent e) { Key 이벤트 KeyListener 인터페이스구현 메소드 설명 keytyped(keyevent e) 사용자가글자를입력했을경우에호출 keypressed(keyevent e) 사용자가키를눌렀을경우에호출 keyreleased(keyevent e) 사용자가키에서손을떼었을경우에호출 if (e.getsource () == button1){

Key 이벤트예제 Key 이벤트예제 키보드에서문자가입력되면문자코드와키코드, ALT 나 SHIFT 키의상태를텍스트영역에출력한다. public class KeyEventTest extends JFrame implements KeyListener { private JPanel panel; private JTextField field; private JTextArea area; public KeyEventTest() { panel = new JPanel(new GridLayout(0, 2)); panel.add(new JLabel(" 문자를입력하시오 : ")); field = new JTextField(10); panel.add(field); area = new JTextArea(3, 30); add(panel, BorderLayout.NORTH); add(area, BorderLayout.CENTER); field.addkeylistener(this); settitle("keyevent Test"); setsize(400, 200); new KeyEventTest(); public void keytyped(keyevent e) { display(e, "Key Typed "); public void keypressed(keyevent e) { display(e, "Key Pressed "); public void keyreleased(keyevent e) { display(e, "Key Released "); protected void display(keyevent e, String s) { char c = e.getkeychar(); int keycode = e.getkeycode(); String modifiers = "Alt: " + e.isaltdown() + "Ctrl: " + e.iscontroldown() + "Shift: " + e.isshiftdown(); area.append("" + s + " 문자 " + c + "( 코드 : " + keycode + ") " + modifiers + "\n"); Mouse 이벤트 MouseMotion 이벤트

Mouse 이벤트예제 import javax.swing.*; import java.awt.*; import java.awt.event.*; class MyFrame extends JFrame implements MouseListener, MouseMotionListener { settitle("mouse Event"); setsize(300, 200); setdefaultcloseoperation(jframe.exit_on_close); JPanel panel = new JPanel(); panel.addmouselistener(this); panel.addmousemotionlistener(this); add(panel); protected void display(string s, MouseEvent e) { System.out.println(s + " X=" + e.getx() + " Y=" + e.gety()); 마우스이벤트처리기를붙인다. public void mousepressed(mouseevent e) { display("mouse pressed (# of clicks: " + e.getclickcount() + ")", e); public void mousereleased(mouseevent e) { display("mouse released (# of clicks: " + e.getclickcount() + ")", e); public void mouseentered(mouseevent e) { display("mouse entered", e); public void mouseexited(mouseevent e) { display("mouse exited", e); public void mouseclicked(mouseevent e) { display("mouse clicked (# of clicks: " + e.getclickcount() + ")", e); public void mousedragged(mouseevent e) { display("mouse dragged", e); public void mousemoved(mouseevent e) { display("mouse moved", e); public class MyFrameTest5 { MyFrame f=new MyFrame(); LAB: 사각형그리기 마우스를클릭할때마다사각형이화면에그려지는예제를작성하여보자. class Rectangle { int x, y, w, h; class MyPanel extends JPanel implements MouseListener { BufferedImage img = null; int img_x = 0, img_y = 0; Rectangle[] array = new Rectangle[100]; int index = 0; public MyPanel() { this.addmouselistener(this); public void paintcomponent(graphics g) { super.paintcomponent(g); for (Rectangle r : array) if (r!= null) g.drawrect(r.x, r.y, r.w, r.h); @Override public void mousepressed(mouseevent e) { if (index > 100) return; array[index] = new Rectangle(); array[index].x = e.getx(); array[index].y = e.gety(); array[index].w = 50; array[index].h = 50; index++; repaint(); @Override public void mousereleased(mouseevent e) { @Override public void mouseclicked(mouseevent e) { @Override public void mouseentered(mouseevent e) { @Override public void mouseexited(mouseevent e) { public class MouseEventTest extends JFrame { public MouseEventTest() { setsize(300, 300); settitle(" 마우스로사각형그리기 "); setdefaultcloseoperation(jframe.exit_on_close); add(new MyPanel()); MouseEventTest s = new MouseEventTest();

Adapter 클래스 인터페이스의경우, 모든메소드를구현하여야한다. 어댑터클래스 (Adaptor Class) 를사용하면원하는메소드만을구현하는것이가능해진다 인터페이스 ComponentListener ContainerListener FocusListener KeyListener MouseListener MouseMotionListener WindowListener 어댑터클래스 ComponentAdapter ContainerAdapter FocusAdater KeyAdapter MouseAdapter MouseMotionAdapter WindowAdapter Listener 를사용하는경우 public class MyClass implements MouseListener { public MyClass() { // someobject.addmouselistener(this); public void mousepressed(mouseevent e) { public void mousereleased(mouseevent e) { public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { public void mouseclicked(mouseevent e) { // // Adapter 를사용하는경우 public class MyClass extends MouseAdapter { public MyClass() { // someobject.addmouselistener(this); public void mouseclicked(mouseevent e) { // Key 예제 KeyAdapter 로수정 public class KeyAdapterTest extends JFrame { private JPanel panel; private JTextField field; private JTextArea area; public KeyAdapterTest() { panel = new JPanel(new GridLayout(0, 2)); panel.add(new JLabel(" 문자를입력하시오 : ")); field = new JTextField(10); panel.add(field); area = new JTextArea(3, 30); add(panel, BorderLayout.NORTH); add(area, BorderLayout.CENTER); field.addkeylistener(new KeyAdapter() { public void keypressed(keyevent e) { // keypressed만넣고싶을때 display(e, "Key Pressed "); ); settitle("keyadaptertest"); setsize(400, 200); new KeyAdapterTest();