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

Similar documents
9장.key

PowerPoint 프레젠테이션

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

PowerPoint 프레젠테이션

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

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

<4D F736F F F696E74202D20C1A63138C0E520C0CCBAA5C6AE20C3B3B8AE28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

PowerPoint Presentation

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

PowerPoint Presentation

10장.key

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

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

11장.key

오버라이딩 (Overriding)

Microsoft PowerPoint - 06-Chapter09-Event.ppt

<4D F736F F F696E74202D20C1A63230C0E520BDBAC0AE20C4C4C6F7B3CDC6AE203128B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

No Slide Title

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

No Slide Title

슬라이드 1

강의자료

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

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

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

<4D F736F F F696E74202D205B4A415641C7C1B7CEB1D7B7A1B9D65D3130C0E5C0CCBAA5C6AEC3B3B8AE>

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

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

운동시뮬레이션 강의 소개

PowerPoint Presentation

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

Cluster management software

PowerPoint 프레젠테이션

Microsoft PowerPoint - 04-UDP Programming.ppt

Java Programing Environment

Microsoft PowerPoint - 14주차 강의자료

슬라이드 1

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - Java-03.pptx

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

PowerPoint 프레젠테이션

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

Cluster management software

PowerPoint Presentation

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

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

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

슬라이드 1

Microsoft PowerPoint - 10장

PowerPoint Presentation

Microsoft PowerPoint - 12장_스윙 [호환 모드]

PowerPoint Presentation

제13강. 스윙(Swing)

Cluster management software

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

PowerPoint 프레젠테이션

11-GUI.key

PowerPoint 프레젠테이션

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

JAVA PROGRAMMING 실습 08.다형성

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

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

PowerPoint Presentation

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

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

Java Coding Standard

중간고사

PowerPoint 프레젠테이션

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

제11장 프로세스와 쓰레드

Network Programming

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

PowerPoint Presentation

PowerPoint Presentation

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

05-class.key

쉽게 풀어쓴 C 프로그래밍

Design Issues

PowerPoint 프레젠테이션

8장.그래픽 프로그래밍

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - Java7.pptx

쉽게 풀어쓴 C 프로그래밍

Chap12

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

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

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

PowerPoint Presentation

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

어댑터뷰

제1장 자바 언어 소개

설계란 무엇인가?

Transcription:

자바에서 GUI 의종류 자바 GUI & 이벤트처리 514770-1 2017 년봄학기 4/19/2017 박경신 AWT(Abstract Windows Toolkit) 운영체제가제공하는자원을이용하여서컴포넌트를생성한다. SWING 스윙컴포넌트가자바로작성되어있기때문에어떤플랫폼에서도일관된화면을보여줄수있다. AWT AWT(Abstract Windows Toolkit) 자바가처음나왔을때함께배포된 GUI 라이브러리 java.awt 패키지 native( 운영체제 ) 와응용프로그램사이의연결라이브러리 중량컴포넌트 (Heavy weight components) AWT 컴포넌트는 native(peer) 에의존적임 OS 의도움을받아야화면에출력되며동작하는컴포넌트. 운영체제에많은부담. 오히려처리속도는빠름 SWING Swing( 스윙 ) AWT 기술을기반으로작성된자바라이브러리 모든 AWT 기능 + 추가된풍부하고화려한고급컴포넌트 AWT 컴포넌트에 J자가덧붙여진이름의클래스 그외 J 자로시작하는클래스 순수자바언어로구현, JDK 1.1 부터 - javax.swing 패키지 Swing 컴포넌트는 native(peer 혹은운영체제 ) 에의존하지않음 경량컴포넌트 (Light weight components)

SWING Components SWING Components JProgressBar JButton JCheckBox JRadioButton JSlider JToolTip JScrollPane JTextField JPasswordField JSpinner JMenu JTextArea JComboBox JList JDialog JApplet JFrame SWING Components SWING Components JToolBar JTable JSplitPane JTabbedPane JTree JEditorPane and JTextPane

Font Button List Checkbox Swing 클래스 GUI 라이브러리계층구조 Object Label Canvas Choice FontMetrics JLabel JList JComboBox JScrollBar JOptionPane JPanel JTabbedPane TextComponent Scrollbar JLayeredPane JSplitPane JSeparator JRootPane JToolBar Component JSlider JMenuBar JToolTip JPopupMenu JFileChooser JColorChooser JTree JTable JProgressBar JSpinner JScrollPane JTableHeader JInternalFrame Dimension Container JComponent Color Panel Applet JApplet JTextComponent JEditorPane JTextField JTextArea JPasswordField JMenu Graphics Window Frame JFrame AbstractButton Dialog JDialog JMenuItem JButton JToggleButton JCheckBoxMenuItem JRadioButtonMenuItem AWT 클래스 JCheckBox JRadioButton Swing 클래스의특징 클래스이름이 J 자로시작 화려하고다양한컴포넌트로쉽게 GUI 프로그래밍 스윙컴포넌트는 2 가지유형 JComponent 는상속받는클래스 대부분의스윙컴포넌트 AWT 의 Container 를상속받는몇개의클래스 JApplet, JDialog, JFrame 등 JComponent 매우중요한추상클래스 스윙컴포넌트의공통적인속성구현 JComponent() 인스턴스를생성할수없음 AWT 의 Component 를상속받음 컨테이너와컴포넌트 기본컴포넌트 컨테이너에포함되어야화면에출력될수있는 GUI 객체 JButton, JLabel, JCheckbox, JChoice, JList, JMenu, JTextField, JScrollbar, JTextArea, JCanvas 등이여기에속한다. 모든 GUI 컴포넌트의최상위클래스 java.awt.component 스윙컴포넌트의최상위클래스 javax.swing.jcomponent 컨테이너컴포넌트 다른컴포넌트를안에포함할수있는컴포넌트 JFrame, JDialog, JApplet, JPanel, JScrollPane 등이여기에속한다. 컨테이너의종류 최상위컨테이너 다른컨테이너에속하지않고독립적으로존재가능한컨테이너 스스로화면에자신을출력하는컨테이너 JFrame, JDialog, JApplet 모든컴포넌트는컨테이너에포함되어야화면에출력가능 일반컨테이너 다른컴포넌트를포함할수있는 GUI 컴포넌트 java.awt.container를상속받음 다른컨테이너에포함될수있음 AWT 컨테이너 Panel, Frame, Applet, Dialog, Window Swing 컨테이너 JPanel, JFrame, JApplet, JDialog, JWindow

스윙 GUI 프로그램만들기 1. 프레임만들기 2. 프레임에스윙컴포넌트붙이기 3. main() 메소드작성 스윙프로그램을작성하기위한 import문 import java.awt.*; // 그래픽처리를위한클래스들의경로명 import java.awt.event.*; // AWT 이벤트사용을위한경로명 // 스윙컴포넌트클래스들의경로명 import javax.swing.event.*; // 스윙이벤트를위한경로명 JFrame 클래스 모든스윙컴포넌트를담는최상위 GUI 컨테이너 JFrame을상속받아구현 컴포넌트가화면에보이려면스윙프레임에부착되어야함 프레임을닫으면프레임내의모든컴포넌트가보이지않게됨 스윙프레임 (JFrame) 기본구성 Frame 스윙프로그램의기본틀 Menu 메뉴들이부착되는공간 Content Pane GUI 컴포넌트들이부착되는공간 타이틀바를가진 Frame 메뉴바 Frame Menu Bar JFrame 컨텐트팬 : 화면에출력될모든컴포넌트들이부착되는공간 Content Pane 타이틀 JFrame 클래스 setlocation(x, y), setbounds(x, y, width, height), setsize(width, height) 프레임의위치와크기를설정한다. seticonimage(iconimage) 윈도우시스템에타이틀바, 태스크스위처에표시할아이콘을알려준다. settitle() 타이틀바의제목을변경한다. setresizable(boolean) 사용자가크기를조절할수있는지를설정한다. 프레임만들기 프레임만들기두가지방법 1. main() 메소드에서 JFrame 객체생성 2. JFrame을상속받은프레임클래스이용 방법 1. main() 메소드에서 JFrame 객체생성확장성, 융통성결여 public class MyApp { public static void main(string [] args) { JFrame f = new JFrame(); f.settitle(" 첫번째프레임 "); f.setsize(300,300); f.setvisible(true); 300 픽셀 300 픽셀 방법 2. JFrame 을상속받은프레임클래스이용 JFrame 을상속받은프레임클래스이용 main() 은단순히프레임객체를생성하는역할 public class MyFrame extends JFrame { MyFrame() { settitle(" 첫번째프레임 "); setsize(300,300); setvisible(true); public static void main(string [] args) { MyFrame mf = new MyFrame(); 추천

프레임에컴포넌트붙이기 스윙응용프로그램의종료 타이틀 타이틀바에부착컨텐트팬알아내기스윙컴포넌트 컨텐트팬에부착컨텐트팬에컴포넌트달기 // JFrame 의생성자이용 JFrame frame = new JFrame(" 타이틀문자열 "); // JFrame 의 settitle() 메소드호출 frame.settitle(" 타이틀문자열 "); JFrame frame = new JFrame(); Container contentpane = frame.getcontentpane(); JFrame frame = new JFrame(); JButton b = new JButton("Click"); Container c = frame.getcontentpane(); c.add(b); 응용프로그램내에서스스로종료 System.exit(0); 언제어디서나무조건종료 프레임종료버튼 (X) 이클릭되면어떤일이일어나는가? 프레임을종료하여프레임윈도우가닫힘 프레임이화면에서보이지않게되고응용프로그램이사라짐 프레임이보이지않게되지만응용프로그램이종료한것아님 키보드나마우스입력을받지못함 다시 setvisible(true) 를호출하면보이게되고이전처럼작동함 프레임종료버튼이클릭될때프레임을닫고응용프로그램이종료하도록하는방법 컨텐트팬변경 JPanel p = new JPanel(); frame.setcontentpane(p); frame.setdefaultcloseoperation(jframe.exit_on_close); main() 종료뒤에도프레임이살아있는이유? 배치관리자 (Layout) 의종류 스윙프로그램이실행되는동안생성되는스레드 메인스레드 main() 을실행하는스레드 자바응용프로그램의실행을시작한스레드 이벤트처리스레드 스윙응용프로그램이실행될때자동으로실행되는스레드 이벤트처리스레드의역할 프레임과버튼등 GUI 화면그리기 키나마우스입력을받아이벤트를처리할코드호출 자바응용프로그램의종료조건 실행중인사용자스레드가하나도없을때종료 스윙프로그램 main() 종료뒤프레임이살아있는이유 메인스레드가종료되어도이벤트처리스레드가살아있어프레임화면을그리고마우스나키입력을받기때문 FlowLayout GridBagLayout GridLayout

배치관리자 (Layout) 의종류 배치관리자의설정 BorderLayout BoxLayout CardLayout 배치관리자설정방법 1. 생성자를이용하는방법 JPanel panel = new JPanel(new BorderLayout()); 2. setlayout() 메소드이용 panel.setlayout(new FlowLayout()); 프로그래머가컴포넌트의크기와힌트를배치관리자에게주고싶은경우에는 setminimumsize(), setpreferredsize(), setmaximumsize() 메소드를사용 button.setmaximumsize(new Dimension(300, 200)); // 최대크기힌트 button.setalignmentx(jcomponent.center_alignment); // 중앙정렬힌트 컨테이너와기본배치관리자 컨테이너의디폴트배치관리자 컨테이너는생성시디폴트배치관리자설정 컨테이너에새로운배치관리자설정 Container.setLayout(LayoutManager lm) lm 을새로운배치관리자로설정 FlowLayout 배치방법 컨테이너공간내에왼쪽에서오른쪽으로배치 다시위에서아래로순서대로컴포넌트를배치한다. container.setlayout(new FlowLayout()); container.add(new JButton("add")); container.add(new JButton("sub")); container.add(new JButton("mul")); container.add(new JButton("div")); container.add(new JButton("Calculate")); // JPanel 패널에 BorderLayout 설정 JPanel p = new JPanel(); p.setlayout(new BorderLayout()); JFrame frame = new JFrame(); Container c = frame.getconentpane(); // 프레임의컨텐트팬 c.setlayout(new FlowLayout()); // 컨텐트팬에 FlowLayout 설정혹은 frame.setlayout(new FlowLayout()); // JDK 1.5 이후버전에서

FlowLayout 컨테이너의크기가변화면배치관리자에의해서재배치 프레임의크기를바꾸면배치도변한다. FlowLayout 생성자 FlowLayout() FlowLayout(int align) FlowLayout(int align, int hgap, int vgap) align : 컴포넌트의정렬 (5 가지중많이사용되는 3 가지 ) FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.CENTER( 디폴트 ) hgap : 좌우두컴포넌트사이의수평간격, 픽셀단위 ( 디폴트 : 5) vgap : 상하두컴포넌트사이의수직간격, 픽셀단위 ( 디폴트 : 5) vgap hgap FlowLayout.LEFT 로정렬됨 예제 : LEFT 로정렬되는수평간격이 30 픽셀, 수직간격이 40 픽셀인 FlowLayout 사용예 BorderLayout import java.awt.*; public class FlowLayoutEx extends JFrame { FlowLayoutEx() { settitle("flowlayout Sample"); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); c.setlayout(new FlowLayout(FlowLayout.LEFT, 30, 40)); c.add(new JButton("add")); c.add(new JButton("sub")); c.add(new JButton("mul")); c.add(new JButton("div")); c.add(new JButton("Calculate")); setsize(300, 250); setvisible(true); vgap, 40 픽셀 배치방법 컨테이너공간을 5 구역으로분할, 배치 East, West, South, North, Center 배치방법 add(component comp, int index) comp를 index의공간에배치 컨테이너의크기가변하면재배치 container.setlayout(new BorderLayout()); container.add(new JButton("div"), BorderLayout.WEST); container.add(new JButton("Calculate"), BorderLayout.CENTER); BorderLayout.NORTH BorderLayout.EAST public static void main(string[] args) { new FlowLayoutEx(); hgap, 30 픽셀 FlowLayout.LEFT로정렬됨 BorderLayout.WEST BorderLayout.SOUTH BorderLayout.CENTER

BorderLayout BorderLayout 의사용예 생성자 BorderLayout() BorderLayout(int hgap, int vgap) hgap : 좌우두컴포넌트사이의수평간격, 픽셀단위 ( 디폴트 : 0) vgap : 상하두컴포넌트사이의수직간격, 픽셀단위 ( 디폴트 : 0) 생성자또는메소드 설명 CENTER에컴포넌트가삽입될때 CENTER와 NORTH에컴포넌트가삽입될때 CENTER, NORTH, SOUTH에 컴포넌트가삽입될때 컴포넌트사이의수평간격 hgap과수직간격 BorderLayout(int hgap, int vgap) vgap을을가지는 BorderLayout 객체생성 sethgap(int) 컴포넌트사이의수평간격설정 ( 단위는픽셀 ) setvgap(int) 컴포넌트사이의수직간격설정 new BorderLayout(30,20); 으로배치관리자를생성하였을때 vgap, 20 픽셀 hgap, 30 픽셀 예제 : BorderLayout 사용예 GridLayout import java.awt.*; public class BorderLayoutEx extends JFrame { BorderLayoutEx() { settitle("borderlayout Sample"); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); c.setlayout(new BorderLayout()); c.add(new JButton("add"), BorderLayout.NORTH); c.add(new JButton("sub"), BorderLayout.SOUTH); c.add(new JButton("mul"), BorderLayout.EAST); c.add(new JButton("div"), BorderLayout.WEST); c.add(new JButton("Calculate"), BorderLayout.CENTER); setsize(300, 200); setvisible(true); public static void main(string[] args) { new BorderLayoutEx(); 배치방법 컨테이너공간을동일한사각형격자 ( 그리드 ) 로분할하고각셀에하나의컴포넌트배치 격자구성은생성자에행수와열수지정 셀에왼쪽에서오른쪽으로, 다시위에서아래로순서대로배치 컨테이너의크기가변하면재배치 크기재조정 // 4 3 분할로컴포넌트배치 container.setlayout(new GridLayout(4,3,5,5)); // 상단왼쪽첫번째셀에버튼배치 container.add(new JButton("1")); // 그옆셀에버튼배치 container.add(new JButton("2")); 4x3 그리드레이아웃설정 총 11 개의버튼이순서대로 add 됨 수직간격 vgap : 5 픽셀 수평간격 hgap : 5 픽셀

GridLayout 예제 : GridLayout 으로입력폼만들기 생성자 생성자 GridLayout(int rows, int cols) GridLayout(int rows, int cols, int hgap, int vgap) rows : 격자의행수 ( 디폴트 : 1) cols : 격자의열수 ( 디폴트 : 1) hgap : 좌우두컴포넌트사이의수평간격, 픽셀단위 ( 디폴트 : 0) vgap : 상하두컴포넌트사이의수직간격, 픽셀단위 ( 디폴트 : 0) rows x cols 만큼의셀을가진격자로컨테이너공간을분할, 배치 GridLayout(int rows, int cols) GridLayout(int rows, int cols, int hgap, in t vgap) 설명 rows 행과 cols 열을가지는 GridLayout 객체를생성한다. 만약 rows나 cols가 0이면필요한만큼의행이나열이만들어진다. rows 행과 cols 열을가지는 GridLayout 객체를생성한다. hgap과 vgap은컴포넌트사이의수평간격과수직간격으로단위는픽셀이다. 두행사이의수직간격 vgap 이 5 픽셀로설정됨 import java.awt.*; public class GridLayoutEx extends JFrame { GridLayoutEx() { settitle("gridlayout Sample"); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); GridLayout grid = new GridLayout(4, 2); grid.setvgap(5); c.setlayout(grid); c.add(new JLabel(" 이름 ")); c.add(new JTextField("")); c.add(new JLabel(" 학번 ")); c.add(new JTextField("")); c.add(new JLabel(" 학과 ")); c.add(new JTextField("")); c.add(new JLabel(" 과목 ")); c.add(new JTextField("")); setsize(300, 200); setvisible(true); public static void main(string[] args) { new GridLayoutEx(); 배치관리자없는컨테이너 예제 : 배치관리자없는컨테이너에컴포넌트위치와크기를절대적으로지정 배치관리자가없는컨테이너개념 응용프로그램에서컴포넌트의절대크기와절대위치결정 컴포넌트의크기나위치를개발자임의로결정하고자하는경우 게임프로그램과같이시간이나마우스 / 키보드의입력에따라컴포넌트들의위치와크기가수시로변하는경우 여러컴포넌트들이서로겹쳐출력하고자하는경우 컨테이너의배치관리자제거방법 container.setlayout(null); // JPanel 의배치관리자를삭제하는예 JPanel p = new JPanel(); p.setlayout(null); 컴포넌트의크기와위치설정 프로그램내에서크기와위치설정을해야함 컴포넌트들이서로겹치게할수있음 컴포넌트크기설정 : component.setsize(int width, int height); 컴포넌트위치설정 : component.setlocation(int x, int y); 컴포넌트위치와크기동시설정 : component.setbounds(int x, int y, int width, int height); 원하는위치에원하는크기로컴포넌트를마음대로배치할수있다. import java.awt.*; public class NullContainerEx extends JFrame { NullContainerEx() { settitle("null Container Sample"); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); c.setlayout(null); JLabel la = new JLabel("Hello, Press Buttons!"); la.setlocation(130, 50); la.setsize(200, 20); c.add(la); for(int i=1; i<=9; i++) { JButton b = new JButton(Integer.toString(i)); b.setlocation(i*15, i*15); b.setsize(50, 20); c.add(b); setsize(300, 200); setvisible(true); public static void main(string[] args) { new NullContainerEx();

이벤트기반프로그래밍 이벤트처리순서 이벤트-구동프로그래밍 (event-driven programming): 프로그램의실행이이벤트의발생에의하여결정되는방식 이벤트가발생하면이벤트를처리하는루틴 ( 이벤트리스너 ) 실행 프로그램내의어떤코드가언제실행될지아무도모름, 이벤트의발생에의해전적으로결정 반대되는개념 : 배치실행 (batch programming) 프로그램의개발자가프로그램의흐름을결정하는방식 이벤트종류 마우스드래그, 마우스클릭, 키보드누름등사용자입력 센서로부터의입력, 네트워크로부터데이타송수신 다른응용프로그램이나다른스레드로부터의메시지 이벤트기반프로그램의구조 이벤트처리리스너들의집합 이벤트처리순서 이벤트발생 ( 예 : 마우스나키보드의움직임혹은입력 ) 이벤트객체생성 현재발생한이벤트에대한정보를가진객체 이벤트리스너찾기 이벤트리스너호출 이벤트객체가리스너에전달됨 이벤트리스너실행 마우스로메뉴선택 (Mouse Event, Action Event) 마우스로버튼클릭 (Mouse Event, 마우스로 Action Event) 윈도우크기조절 (Mouse Event, Container Event) 키보드입력 (Key Event) 키보드로메뉴선택 (Key Event, Action Event) 이벤트객체 이벤트객체에포함된정보 이벤트객체란? 이벤트가발생할때, 발생한이벤트에관한정보를가진객체 이벤트리스너에전달됨 이벤트리스너코드에서이벤트가발생한상황을파악할수있게함 이벤트객체의종류 java.awt.event.* ActionEvent java.util.eventobject java.awt.awtevent AdjustmentEvent EventObject AWTEvent ComponentEvent ItemEvent TextEvent ContainerEvent FocusEvent InputEvent PaintEvent WindowEvent MouseEvent KeyEvent ListSelectionEvent javax.swing.event.listselectionevent 이벤트객체가포함하는정보 이벤트종류, 이벤트소스 이벤트가발생한화면좌표, 이벤트가발생한컴포넌트내좌표 버튼이나메뉴아이템에이벤트가발생한경우버튼이나메뉴아이템의문자열 클릭된마우스버튼번호, 마우스의클릭횟수 키가눌러졌다면키의코드값과문자값 체크박스, 라디오버튼등과같은컴포넌트에이벤트가발생하였다면체크상태이벤트에따라조금씩다른정보포함 ActionEvent 객체 : 액션문자열 MouseEvent 객체 : 마우스의위치정보, 마우스버튼, 함께눌러진키정보등 ItemEvent 객체 : 아이템의체크상태이벤트소스알아내기 Object EventObject.getSource() 발생한이벤트의소스컴포넌트리턴 Object 타입으로리턴하므로캐스팅하여사용 모든이벤트객체에대해적용

이벤트객체와이벤트소스 이벤트리스너 (Event Listener) 이벤트리스너란? 발생된이벤트객체에반응하여서이벤트를처리하는객체를이벤트리스너 (event listener) 라고한다. 이벤트리스너작성을위한 interface 제공 개발자가리스너인터페이스의추상메소드구현 이벤트가발생하면자바플랫폼은리스너인터페이스의추상메소드호출 예 ) ActionListener, MouseListener 인터페이스 interface ActionListener { // 아래메소드를개발자가구현해야함 public void actionperformed(actionevent e); // Action 이벤트발생시호출됨 41 interface MouseListener { // 아래의 5 개메소드를개발자가구현해야함 public void mousepressed(mouseevent e); // 마우스버튼이눌러지는순간호출 public void mousereleased(mouseevent e); // 눌러진마우스버튼이떼어지는순간호출 public void mouseclicked(mouseevent e); // 마우스가클릭되는순간호출 public void mouseentered(mouseevent e); // 마우스가컴포넌트위에올라가는순간호출 public void mouseexited(mouseevent e); // 마우스가컴포넌트위에서내려오는순간호출 이벤트리스너등록 이벤트리스너등록 이벤트를받아처리하고자하는컴포넌트에이벤트리스너등록 이벤트리스너등록메소드 Component.addXXXListener(listener) xxx : 이벤트명 listener : 이벤트리스너객체 예 ) addmouselistener(), addactionlistener(), addfocuslistener() 등 이벤트리스너가등록된컴포넌트에만이벤트전달 이벤트리스너가등록된컴포넌트만이벤트리스너코드작동 44

이벤트처리기작성방법 1. 독립적인클래스로이벤트처리기를작성 2. 내부클래스 (inner class) 로이벤트처리기를작성 3. 프레임클래스에이벤트처리를구현 4. 무명클래스 (anonymous class) 를사용하는방법 5. 람다식 (lambda) 을이용하는방법 1. 독립적인클래스작성 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; public MyFrame() { 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.setvisible(true); 이벤트리스너를컴포넌트에붙인다. public class ActionEventTest1 { public static void main(string[] args) { MyFrame t = new MyFrame(); Action 이벤트를처리하는코드작성. 2. 내부클래스방법 만약 MyListener라는클래스를별도의클래스로하면 MyFrame 안의멤버변수들을쉽게사용할수없다. 일반적으로 MyListener 클래스를내부클래스로만든다. 3.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 { public static void main(string[] args) { MyFrame t = new MyFrame(); 내부클래스 label 에접근할수있다. class MyFrame extends JFrame implements ActionListener { public MyFrame() { button = new JButton(" 버튼을누르시오 "); label = new JLabel(" 아직버튼이눌려지지않았습니다 "); button.addactionlistener(this); public void actionperformed(actionevent e) { if (e.getsource() == button) { label.settext(" 마침내버튼이눌려졌습니다."); 이벤트도처리

4. 무명클래스를사용하는방법 5. 람다식을이용하는방법 class MyFrame extends JFrame { public MyFrame() { button = new JButton(" 버튼을누르시오 "); button.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { if (e.getsource() == button) { label.settext(" 마침내버튼이눌려졌습니다."); ); class MyFrame extends JFrame { private JButton button; private JLabel label; public MyFrame() { 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.setvisible(true);