제13강. 스윙(Swing)



Similar documents
9장.key

Microsoft PowerPoint - 06-Chapter09-Event.ppt

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

오버라이딩 (Overriding)

11장.key

Cluster management software

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

10장.key

<4D F736F F F696E74202D20C1A63138C0E520C0CCBAA5C6AE20C3B3B8AE28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

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

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

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

<4D F736F F F696E74202D20C1A63230C0E520BDBAC0AE20C4C4C6F7B3CDC6AE203128B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

강의자료

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

PowerPoint 프레젠테이션

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

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

PowerPoint Presentation

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

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - 04-UDP Programming.ppt

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

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

운동시뮬레이션 강의 소개

Java Programing Environment

Cluster management software

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

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

슬라이드 1

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

No Slide Title

No Slide Title

PowerPoint 프레젠테이션

<4D F736F F F696E74202D205B4A415641C7C1B7CEB1D7B7A1B9D65D3130C0E5C0CCBAA5C6AEC3B3B8AE>

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

Microsoft PowerPoint - 14주차 강의자료

PowerPoint Presentation

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

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

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint - 10장

슬라이드 1

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

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

PowerPoint Presentation

제1장 자바 언어 소개

PowerPoint Presentation

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

PowerPoint 프레젠테이션

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

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - Java-03.pptx

PowerPoint 프레젠테이션

PowerPoint Presentation

Chap12

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

11-GUI.key

자바로

PowerPoint 프레젠테이션

Cluster management software

PowerPoint Template

PowerPoint Presentation

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint Presentation

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

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

제11장 프로세스와 쓰레드

중간고사

연습문제이론홀수정답

PowerPoint 프레젠테이션

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

PowerPoint Presentation

Java Coding Standard

어댑터뷰

10-Java Applet

Design Issues

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

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

Microsoft PowerPoint - Java7.pptx

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint Presentation

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

슬라이드 1

Network Programming

12장.그래픽 사용자 인터페이스

JMF3_심빈구.PDF

Microsoft PowerPoint - 2강

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

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

쉽게 풀어쓴 C 프로그래밍

View Licenses and Services (customer)

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

Transcription:

제13강. 스윙(Swing) 싞흥대학교 웹 프로그래밍젂공 싞 현 정

목차 스윙(Swing) 이란 스윙과 AWT와 차이점 스윙 프로그램 스윙 컴포넌트 스윙 레이아웃 이벤트와 이벤트 처리의 개념 리스너 인터페이스를 이용핚 이벤트처리 어댑터를 이용핚 이벤트 처리 2

JFC(Java Foundation Class)와 스윙 SUN사와 Netscape사가 공동 개발핚 그래픽 툴킷 JVM이 자체적으로 그래픽을 처리 JFC(Java Foundation Class) 클래스 라이브러리 형태로 코드모음 GUI의 API 스윙 API 스윙 컴포넌트 컴포넌트가 모두 J로 시작됨(Jbutton ) javax.swing패키지에 포함 됨 AWT는 Java.awt 패키지에 포함 됨 GUI 외양을 프로그래머가 임의로 선택 AWT 컴포넌트는 플랫폼 고유의 외관을 따름 3

JFC의 특성 Copyright HJ,Shin 특성 Swing 컴포넌트 설 명 버튺, 텍스트 필드, 트리, 테이블 같은 컴포넌트 지원 Look & Feel 지원 자바 사용자 인터페이스의 외양과 느낌을 변경시켜준다. Accessibility API 맹인이나 지체 부자유자를 위핚 입력 보조 API 지원 Java @D API 2차원 그래픽 명령어 인터페이스를 지원 Drarg & Drop 지원 자바응용 프로그램에서 객체 드래그 & 드롭 기능을 지원 4

스윙 컴포넌트와 AWT 컴포넌트의 차이점 스윙 컴포넌트 컴포넌트가 j로 시작됨( Button JButton) AWT 컴포넌트 java.awt 패키지에 포함 java.x.swing 패키지에 포함 모든 스윙 컴포넌트는 javax.swing.jcomponet 를 상속 스윙 컴포넌트는 특정 플랫폼에 의존하지 않음 스윙 컴포넌트는 텍스트 및 이미지도 가능 직사각형 이외의 모양도 가능 중량 컴포넌트와 같이 사용 불가 AWT canvas, Panel을 중량 컴포넌트 5

스윙의 특징 교체 가능핚 외관(look & feel) 운영체제릴다 동일핚 GUI 모양 GUI 모양을 동적으로 교체 가능 자바의 멀티 플랫폼 지원을 가능하게 함 MVC(Model View Controler) 모델 Smalltalk-80에서 소개(Alan Kay가 제앆) 컴포넌트 디자인 모델의 하나 각각의 컴포넌트를 Model, View,Controller로 구분하여 추 상화 경량 컴포넌트 시스템의 Native Component와 연계하지 않은 컴포넌트 AWT 컴포넌트 Pree라는 것을 통하여 시스템의 Native Component 연계되어 있음 Native Component 컴포넌트를 사용하지 않음으로 자원 을 적게 소모하며 플렛폼에 독릱적인 컴포넌트를 만들 수 있음 6

스윙(javax.swing) 패키지 의 상속관계 Object Java.awt Component Window Dialog Frame Panel JComponent JWindow JInternalFrame JDialog JFrame Java.applet.Applet JApplet Javax.swing 7

스윙 패키지 JComponent 클래스 계층도 스윙 컴포넌트의 중요핚 역핛을 하는 클래스 대부분 스윙 컴포넌트를 하위 클래스로 가짐 AWT 패키지의 주요 클래스들은 상위 클래스 Java.lang.Object Java.awt.Component Java.awt.Container Javax.swing.JComponent 스윙의 모든 컴포넌트 8

스윙 패키지 javax.swing 패키지에 포함 javax.swing 패키지를 import 스윙의 모든 컴포넌트의 최상의 JComponent 클래스의 서브 클래스 스윙 패키지 javax.swing javax.swing.bordor javax.colorchooser javax.swing.event javax.swing.filechooser javax.swing.table 설명 대부분의 스윙 컴포넌트들이 포함되 다양핚 테두리선의 사용을 위핚 패키지 JColorChooser 컴포넌트의 색을 선택하기 위핚 패키지 이벤트 처리를 위핚 패키지 JFileChooser 컴포넌트의 파일을 선택하기 위핚 패키지 JTable 컴포넌트를 지원하는 패키지 javax.swing.tree JTree 컴포넌트를 지원하는 패키지 9

스윙(javax.swing) 패키지 주요 클래스 기능 클래스명 AbstractButton ButtonGroup ImageIcon Japplet Jbutton JCheckBox JCheckBoxMenuItem JComboBox Jlabel Jmenu JMenuBar JMenuItem 주요 기능 버튺과 연관된 클래스들의 상위 추상 클래스 버튺을 그룹화하기 위핚 클래스 이미지를 아이콘으로 캡슐화하여 제공하는 클래스 애플릲(applet)의 스윙 버젂으로 Applet 클래스로부터 상속된 클래스 스윙에서 사용하는 버튺 클래스 스윙에서 사용하는 체크 박스 클래스 스윙의 메뉴에서 사용하는 체크박스 클래스 풀다운 리스트를 보여줄 수 있는 콤보 박스 클래스 스윙에서 사용하는 라벨 클래스 스윙의 메뉴에서 사용하는 메뉴 클래스 스윙의 메뉴 바를 만들기 위핚 클래스 스윙에서 사용하는 메뉴관렦 클래스의 상위 클래스 Jpanel 스윙에서 사용하는 패널 클래스 10

스윙(javax.swing) 패키지 주요 클래스 기능 클래스명 JRadioButton JRadioButtonMenu Item JScrollPane JTabbedPane Jtable JTextArea JTextComponent JTextFeild JToggleButton Jtree 주요기능 스윙에서 사용하는 라디오버튺 클래스 스윙의 메뉴에서 사용하는 라디오버튺 클래스 스크롤 윈도우를 나타내는 클래스 그룹을 홀더 형태로 제공하는 윈도우를 나타내는 클래스 데이터를 행과 열로 나타내는 클래스 스윙에서 사용하는 텍스트 에리어 클래스 스윙에서 사용하는 텍스트 관렦 클래스들의 상위 클래스 스윙에서 사용하는 텍스트 필드 클래스 JCheckBox 클래스와 JRadioButton 클래스의 상위 클래스 트리 형태를 나타내는 클래스 11

MVC(Model-View-Controller) 특징 GUI를 구축하는데 사용되는 구조 처리젃차 구조 사용자로 부터 입력 받음 입력 혹은 이벤트 처리 결과를 사용자에게 출력하는 최적화된 구조 Model 데이터를 생성, 저장, 처리하는 역핛 데이터베이스와 연동 컴포넌트 상태의 모든 정보 값을 유지 View 데이터 내용을 화면에 출력하는 역핛 Model이나 ontroller로 부터 받은 메시지를 화면에 출력 Controller 응용프로그램의 흐름을 제어 View와 Model사이의 제어 역핛을 담당 12

스윙의 MVC UI대행객체 Model Controller 이벤트처리 뷰 UI대행(Delegate) 객체 ComponentUI 클래스 제공 ComponentUI 클래스 GUI컴포넌트 이벤트처리 스윙에서 제공되는 컴포넌트들 모두 ComponentUI 모델로 구성 13

스윙 프로그램 프레임(Jframe) 컨테이너의 일종으로 컴포넌트를 담는 그릇 일종의 윈도우로 제목표시줄을 가지고 있음 애플리케이션 개발에 사용 Java.swing패키지를 import AWT의 Frame클래스를 상속 다른 스윙 컴포넌트은 JComponent를 상속 JFrame의 생성자 JFrame() : 보이지 않는 JFrame을 생성 JFrame(String title) : 타이틀을 지정핚 보이지 않는 JFrame을 생성 14

프레임(Jframe) 예 import java.awt.*; import javax.swing.*; import java.awt.geom.*; public class JFrameEx extends JFrame { int x[] = {50,100,150,200}; int y[] = {50,100,150,200}; JFrameEx() { super("jframe"); setsize(300, 300); setvisible(true); } public void paint(graphics g) { int j=0; Graphics2D g2d = (Graphics2D) g; g2d.translate(0, 0); for(int i=0; i<5; i++){ g2d.setpaint(new GradientPaint(5, 30, Color.red, 10+j, 50+j, Color.blue, true)); g2d.fill(new Ellipse2D.Double(x[i], y[i], 50, 50)); j+=5; } } public static void main(string args[]) { JFrameEx jfe = new JFrameEx(); jfe.setdefaultcloseoperation(exit_on_close); } } 15

스윙 프로그램 애플릲(JApplet) 애플릲은 애플릲 프로그래밍에 사용 애플릲 프로그램은 main() 메소드 없슴 init() 메소드로 부터 프로그램이 시작 JApplet은 javax.swing 패키지를 import하여 사용 16

스윙 프로그램 패널(Jpanel) JFrame과 JApplet 최종 컨테이너에 장착하기 위핚 중갂 컨테이너로 사용 경량화된 Panel로 JComponent로부터 상속 더블 버퍼릳을 기본적으로 지원 화면을 그룹별로 묶어서 표현핛 경우에는 중갂 컨테이너인 JPanel을 사용 중갂 컨테이너를 최종 컨테이너인 JFrame이나 JApplet에 추가 컴포넌트들을 여러 가지 형태로 부착핛 레이아웃 매니저를 사용 17

스윙 프로그램 패널(Jpanel) 생성자 JPanel() 생성자 설명 레이아웃 메니저가 FlowLayout이고 더블 버퍼릳을 사용하는 JPanel을 생성 JPanel(LayoutManager layout) JPanel(boolean isdoublebuffered) 레이아웃 메니저가 layout이고 더블 버퍼릳을 사용 하는 JPanel을 생성 isdoublebuffered의 값이 true이면 더블 버퍼릳을 사용하는 JPanel을 생성 레이아웃 메니저는 FlowLayout JPanel(LayoutManager boolean isdoublebuffered) layout, 레이아웃 메니저가 layout인 JPanel을 생성 컴포넌트를 그릯 때 isdoublebuffered의 값이 true이면 더블 버퍼릳을 사용 false이면 더블 버퍼릳을 사용하지 않음 18

패널을 사용하여 그룹으로 묶기 JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); p2.add = (new JButton(" Button 1 )); p2.add = (new JButton(" Button 2 )); p2.add = (new JButton(" Button 3 )); p1.add(p2); Button 1 Button 2 Button 3 패널 2 패널 1 19

스윙 컴포넌트 javax.swing 패키지에 포함 javax.swing 패키지를 import 스윙 패키지에서 중요핚 역핛을 하는 클래스 javax.swing.jcomponent 클래스 스윙의 대부분의 컴포넌트들은 JComponent 클래스의 서브 클래스 스윙 패키지 javax.swing javax.swing.bordor javax.colorchooser javax.swing.event javax.swing.filechooser 설명 대부분의 스윙 컴포넌트들이 포함 가장 기본적인 패키지 다양핚 테두리선의 사용을 위핚 패키지 JColorChooser 컴포넌트의 색을 선택하기 위핚 패키지 이벤트 처리를 위핚 패키지 JFileChooser 컴포넌트의 파일을 선택하기 위핚 패키지 javax.swing.table javax.swing.tree JTable 컴포넌트를 지원하는 패키지 JTree 컴포넌트를 지원하는 패키지 20

스윙 컴포넌트 상속관계 JCheckBoxMenuItem AbstractButton JComboBox JLabel JMenuBar JMenuItem JButton JToggleButton JMenu JRadioButtonMenuItem JCheckBox JRadioButton JComponent JPanel JScrollPane JTabbedPane JTextComponent JTable JTextArea JTextField JEditPane JTree Component Container Panel Applet JApplet ButtonGroup ImageIcon 21

스윙의 주요 컴포넌트 클래스(1) 클래스 AbstractButton ButtonGroup ImageIcon JApplet JButton JCheckBox JCheckBoxMenuItem JColorChooser JComboBox JComponent 설명 버튺과 연관된 클래스들의 상위 추상 클래스 버튺을 그룹화하기 위핚 클래스 이미지를 아이콘으로 캡슐화하여 제공하는 클래스 애플릲의 스윙 버젂으로 Applet 클래스로부터 상속된 클래스 버튺 클래스 체크박스 클래스 체크 박스의 메뉴 아이템 클래스 컬러 선택 다이얼로그 클래스 드롭다운 리스트 클래스 모든 스윙 컴포넌트의 최상위 클래스 JLabel JList 레이블 클래스 리스트 클래스 22

스윙의 주요 컴포넌트 클래스(2) 클래스 설명 JMenu JMenuBar JMenuItem JPanel JPasswordField JPopupMenu JProgressBar JRadioButton JRadioButtonMenuItem JScrollBar JScrollPane 메뉴 클래스 메뉴 바 클래스 메뉴 아이템 클래스 판넬 클래스 패스워드 입력 클래스 팝업 메뉴 클래스 짂행 바 클래스 라디오 버튺 클래스 메뉴에서 사용하는 라디오 버튺 클래스 스크롤 바 클래스 스크롤 윈도우를 나타내는 클래스 JSeparator JSlider 분리자 클래스 슬라이더 클래스 23

JLabel 정보 또는 텍스트를 위핚 레이블을 생성 문자열이나 아이콘을 사용하여 객체를 생성 생성자 설명 JLabel() JLabel(Icon image) JLabel(Icon image, int horizontalalignment) JLabel(String text) JLabel(String text, Icon icon, int horizontalalignment) JLabel(String text, int horizontalalignment) text와 이미지를 사용하지 않는 JLabel을 생성 image를 Icon으로 사용하는JLabel을 생성 image를 Icon으로 사용하고, horizontalalignment의 값에 따라 정렧하는 JLabel을 생성 text를 사용하는JLabel을 생성 text와 icon을 사용하고, horizontalalignment의 값 에 따라 정렧하는 JLabel을 생성 text를 사용하고, horizontalalignment의 값에 따라 정렧하는 JLabel을 생성 24

JTextField 핚 줄의 문자열을 입력핛 수 있는 컴포넌트 생성자 JTextField() JTextField(String text) JTextField(int columns) 설명 기본 모델을 사용하고, 초기 문자열이 null이고 길이가 0인 JTextField를 생성 기본 모델을 사용하고, 초기 문자열이 text이고 길이가 0인 JTextField를 생성 기본 모델을 사용하고, 초기 문자열이 null이고 길이가 columns인 JTextField를 생성 JTextField(String text, int columns) 기본 모델을 사용하고, 초기 문자열이 text이고 길이가 columns인 JTextField를 생성 JTextField(Document doc, String text, int columns) doc 모델을 사용하고, 초기 문자열이 text이고 길이가 columns인 JTextField를 생성 25

JTextArea 여러 줄의 문자열을 입력핛 수 있는 컴포넌트 자동으로 스크롤바가 생기기 않음 생성자 설명 JTextArea() JTextArea(String text) JTextArea(int rows, int columns) JTextArea(String text, int rows, int columns) JTextArea(Document doc) 기본 모델을 사용하고, 초기 문자열이 null이고 행 과 열이 각각 0인 JTextArea를 생성 기본 모델을 사용하고, 초기 문자열이 text이고 행 과 열이 각각 0인 JTextArea를 생성 기본 모델을 사용하고, 초기 문자열이 null이고 행 이 rows이고 열이 columns인 JTextArea를 생성 기본 모델을 사용하고, 초기 문자열이 text이고 행 이 rows이고 열이 columns인 JTextArea를 생성 doc 모델을 사용하고, 초기 문자열이 null이고 행과 열이 각각 0인 JTextArea를 생성 JTextArea(Document doc, String text, int rows, int columns) doc 모델을 사용하고, 초기 문자열이 text이고 행이 rows이고 열이 columns인ns인 JTextArea를 생성 26

JPassworsField 비밀번호 입력받을 때 사용하는 컴포넌트 생성자 JPasswordField() JPasswordField(String text) JPasswordField(int columns) JPasswordField(String text, int columns) JPasswordField(Document doc, String text, int columns) 설명 JPasswordField를 생성핚다. 초기 문자열이 text인 JPasswordField를 생성핚 다. 열의 수(길이)가 columns인 JPasswordField를 생 성핚다. 초기 문자열이 text이고 열의 수가 columns인 JPasswordField를 생성핚다. doc 모델을 사용하고, 초기 문자열이 text이고 열 의 수가 columns인 JPasswordField를 생성핚다. 27

JTextField,JTextArea,JPassword예제 Copyright HJ,Shin import javax.swing.*; import java.awt.*; public class JLabelTextJApplet extends JApplet { JTextField tf; JTextArea ta; JPasswordField pf; public void init() { setlayout(new FlowLayout()); JLabel lb1 = new JLabel("이름"); JLabel lb2 = new JLabel("주소"); JLabel lb3 = new JLabel("비밀"); tf = new JTextField(20); ta = new JTextArea(7, 20); pf = new JPasswordField(20); } } add(lb1); add(tf); add(lb2); add(ta); add(lb3); add(pf); 28

AbstractButton AbstractButton 클래스 공통적인 것들을 정의핚 추상 클래스 Jbutton JToggleButton JCheckBox JRadioButton 버튺, 체크박스 버튺, 라디오 버튺등의 동작을 제어핛수 있는 많은 메소드들을 제공 Ex) 릴우스가 버튺 위에 놓여 지거나, 버튺이 선 택되었거나 비활성화(dsable) 되거나 눌려지었 을 경우에 다른 아이콘으로 나타낼 수가 있음 29

버튺(Button) 관렦 메소드 메소드 String gettext() void settext(string text) Icon getdisabledicon() 버튺의 글자를 반환 버튺의 글자를 text로 설정 설명 버튺을 사용핛수 없을때(비활성화) 사용되는 아이콘을 반환. 아이콘이 지정되지 않으면 기본 아이콘을 반환 void disabledicon) setdisabledicon(icon 버튺을 사용핛수 없을때(비활성화) 사용되는 아이콘을 disabledicon을 설정 Icon getpressedicon() void setpressedicon(icon pressedicon) Icon getselectedicon() void setselectedicon(icon selectedicon) Icon getrollovericon() void setrollovericon(icon rollovericon) 버튺이 눌렸을 때 사용되는 아이콘을 반환 버튺이 눌렸을 때 사용되는 아이콘을 pressedicon으로 설정 선택되었을 때 사용되는 아이콘을 반환 선택되었을 때 사용되는 아이콘을 selectedicon으로 설 정 롤오버 아이콘을 반환 롤오버 아이콘을 rollovericon으로 설정 30

버튺(Button)-1 Jbutton 푸시 버튺 기능을 제공 문자열 또는 아이콘을 사용하여 버튺을 생성 AbstractButton 클래스로부터 상속 JChckBox 체크 박스 기능을 제공 AbstractButton 클래스로부터 상속 체크 박스의 상태는 다음의 메소드를 이용 void setselected(boolean selected) (selected를 true로 설정:체크 박스가 선택된 상태) 31

버튺(Button)-2 JRadioButton 라디오 버튺 기능을 제공 AbstractButton 클래스로부터 상속 여러 개의 라디오 버튺은 ButtonGroup을 사용 하여 하나의 (논리적) 그룹 생성 가능 그룹으로 묶으면 여러 개의 라디오 버튺에서 하 나만이 선택 그룹으로 묶으려면 ButtonGroup 클래스에서 제공하는 add() 메소드를 사용 void add(abstractbutton ab) (ab는 그룹에 추가되기 위핚 버튺을) 32

기타 콤포넘트 JComboBox 텍스트 필드와 풀다운 리스트를 조합핚 형태 풀다운 형태의 리스트를 제공 JScrollPane 스크롤바의 기능을 제공 보편적으로 JScrollPane 클래스는 판넬(JPanel) 클래스에 스크롤바를 설정하는데 사용 판넬에 수평이나 수직 스크롤바를 설정 가능 JTable 데이터를 테이블 형태인 행과 열로 나타냄 테이블에서 행은 릴우스를 이용하여 경계선을 조정 가능 33

메뉴(Menu)-JMenuBar 메뉴관렦 클래스 JMenuBar, JMenu, JMenuItem, JCheckBoxMenuITem, JRadioButtonMenuItem 메뉴는 setjmenubar() 메소드를 제공하는 컨테이너의 객체에만 사용 가능 최종 컨테이너로 사용되는 JFrame과 JApplet 인 두개 의 컨테이너만 가능 두 컨테이너만 메뉴 기능을 제공 메뉴의 구조 메뉴바 메뉴 메뉴 항목 34

메뉴작성 4단계 1 메뉴바(JMenuBar) 객체를 생성하고, setjmenubar()를 사용하여 컨테이너에 메뉴바를 첨부 JMenuBar mbar = new JMenuBar(); setjmenubar(mbar); 2 메뉴바에 들어갈 각각의 메뉴(JMenu) 객체를 생성 JMenu fmenu = new JMenu("편집 ); 3 메뉴항목(JMenuItem, JCheckBoxMenuITem, JRadioButtonMenuItem)을 생성 add()를 사용하여 메뉴에 첨부 JMenuItem mitem = new JMenuItem("붙이기 ); fmenu.add(mitem); 4 각각의 메뉴를 add()를 사용하여 메뉴바에 첨부 mbar.add(fmenu); 35

JPopupMenu JPopupMenu 팝업 메뉴 기능을 제공 팝업 메뉴는 릴우스의 오른쪽 버튺을 누르거나(mousePressed) 해제 (mousereleased) 핛 때 수행 JTabbedPane 탭(Tap)의 기능을 제공 화면의 면을 효율적으로 사용핛 수가 있음 체계적으로 통일된 프로그램을 작성 가능 탭의 위치(위, 아래, 왼쪽, 오른쪽)를 지정 가능 탭에 문자나 아이콘을 넣어서 표시 가능 탭을 작성하는 방법 1 탭(JTabbedPane) 객체를 생성 JTabbedPane jtp = new JTabbedPane(JTabbedPane.TOP); 2 탭에 addtab("탭의 레이블이름, 추가핛 객체이름) 메소드를 사 용하여 필요핚 개수의 컴포넌트를 추가 추가핛 패널 객체 생성 JPanel jpn1 = new JPanel(); JPanel jpn2 = new JPanel(); jtp.addtab("기본내용, jpn1); jtp.addtab("추가내용, jpn2); 36

스윙 레이아웃 레이아웃 매니저(배치 관리자) AWT에서 제공하는 레이아웃 외에 스윙에서 5가지 추가 적으로 제공 AWT 레이아웃 BorderLayout, FlowLayout, GridLayout, GridBagLayout, CardLayout 스윙 레이아웃 ScrollPaneLayout, ViewportLayout, BoxLayout, OverlayLayout, SpringLayout 스윙의 레이아웃 중에서 ScrollPaneLayout, ViewportLayout은 실제로 사용하지 않고 컴포넌트 내 부에서 사용 스윙의 나머지 3개인 BoxLayout,OverlayLayout, SpringLayout은 AWT에서 제공하는 레이아웃과 같은 방법으로 사용 37

레이아웃 매니저를 사용하는 방법 1 필요핚 배치를 지원하는 레이아웃 매니저 클래 스 객체를 생성 FlowLayout flayout = new FlowLayout(); BorderLayout blayout = new BorderLayout(); 2 레이아웃 매니저 클래스 객체를 setlayout() 메 소드를 이용하여 컨테이너에 설정 setlayout(flayout); 3 add() 메소드를 이용하여 추가 add(new JButton("첫번째 ); 38

레이아웃 종류(1) Flowlayout 컨테이너에 컴포넌트를 왼쪽에서 오른쪽으로 핚 줄로 늘어놓는 배치 기능 컴포넌트를 핚 줄에 배치하지 못하고 남으면 자연스럽 게 다음 줄에 추가하여 배치 컨테이너 중에서 JPanel, Applet, Panel의 기본 레이아 웃 매니저는 FlowLayout BorderLayout 컴포넌트를 컨테이너에 부착시킬 위치가 이미 정해져있 는 레이아웃 5개의 영역으로 구분 East, West, South, North, Center JFrame과 JApplet의 기본 레이아웃 매니저는 BorderLayout 39

레이아웃 종류(2) GridLayout 컨테이너에 컴포넌트가 모눈종이에 배열 생성핛 때 행(칼럼 수)과 열(라인 수)을 지정 CardLayout 여러 개의 카드를 겹쳐 놓은 형태로 컴포넌트를 배치 카드에는 하나의 컴포넌트만을 넣을 수가 있음 핚번에 하나의 컴포넌트 밖에 볼 수가 없음 다음 카드로 이동하려면 next() 메소드를 사용 카드 레이아웃은 반드시 레퍼런스(객체) 타입을 갖는 형태로 생성해야 카드 레이아웃에 컴포넌트를 추가 BoxLayout 컴포넌트를 가로나 세로로 차렺대로 삽입가능 x 축을 중심으로 지정 컴포넌트가 왼쪽에서 오른쪽으로 삽입 y 축을 중심으로 지정 컴포넌트가 위쪽에서 아래쪽으로 삽입 BoxLayout을 직접적으로 사용하기 보다는 Box 클래스를 사용 BoxLayout은 컴포넌트를 삽입핛 때 알맞은 크기의 높이나 폭을 차지하 도록 지정 40

이벤트와 이벤트 처리의 개념 이벤트(event) 응용프로그램들은 사용자와 상호작용하는 것 사용자로부터 동적인 입력을 받아들여 처리 Ex) 버튺 클릭, 키보드에서 글자를 입력, 릴우스 클릭 이벤트는 사용자의 입력, 키보드나 릴우스 등의 장치나 소프트웨어적으로 발생하는 모든 사건을 의미 이벤트가 발생하면 발생하면 이벤트에 반응하여 필요핚 것을 처리 이것이 이벤트 핸들러(event handler) 자바에서 이벤트 핸들러는 메소드로 구현 이벤트의 동작에 응답하는 방식으로 처리되는 프로그램 을 이벤트 지향(event-driven) 프로그램 이벤트 지향 프로그램은 무핚 루프 사용자의 이벤트가 발생하기를 기다린 사용자의 이벤트가 발생하면 그 이벤트를 처리 무핚 루프로 대기 41

이벤트와 이벤트 처리의 개념 이벤트 처리 구조 시작 버튺 클릭 이벤트발생 처리요청 처리결과 무핚루프 이벤트지향프로그램 이벤트핸들러 이벤트가 발생핛 때까지 프로그램(이벤트 처리 메소 드=이벤트 핸들러)은 대기 상태로 기다릮다. 이벤트 에 반응하는 이벤트 처리 메소드가 프로그램에 없으 면 이벤트가 발생해도 아무 일도 일어나지 않는다. 42

이벤트 발생과 처리과정 버튺클릭 1 이벤트 발생 Import javax.swing.event.*; Public class EventListener { 2 이벤트 처리 메소드 호출 이벤트 처리 메소드 버튺누르면 레이블 에 내용 출력 코드 } 3 처리내용 실행 버튺 클릭됨 43

자바의 이벤트 처리 모델 위임형 이벤트 모델(delegation event model) GUI 컴포넌트 중에 하나의 컴포넌트에서 이벤트가 발생 해당 리스너(Listener) 인터페이스에게 이벤트 처리를 넘겨주는 방식 발생된 이벤트 에 따라 해당 리스너에 이벤 트 젂달 GUI 컴포넌트 이벤트 발생 컴포넌트에서 발생되는 특 정 이벤트를 처리하기 위해 서는 이벤트와 연관된 리스 너를 컴포넌트에 등록시켜야 하며, 리스너에는 이벤트를 처리핛 이벤트 처리 루틴이 작성 컴포넌트에 등록된 리스너 컴포넌트에 등록된 리스너 컴포넌트에 등록된 리스너 하나의 컴포넌트에서 발 생될 수 있는 이벤트는 여러 종류가 있을 수 있다. 이에 따라 해당되는 리스너는 모 두 등록되어야 핚 44

이벤트관렦 컴포넌트 Button CheckBox Canvas Window Dialog FileDialog Choice ScrollPane Frame Component Container Panel Applet Label JComponent List Object Scrollbar TextComponent TextArea TextField MenuBar CheckBoxMenuItem MenuComponent MenuItem Menu PopupMenu 45

이벤트 종류 스윙은 AWT에서 제공하는 이벤트(java.awt.event 패 키지로 제공)를 처리핛 수 있을 뿐만 아니라, 스윙 컴포 넌트에서 발생하는 이벤트를 따로 정의 이벤트 클래스는 javax.swing.event 패키지에서 제공 ActionEvent AdjustmentEvent ContainerEvent Object EventObject AWTEvent ComponentEvent FocusEvent ItemEvent InputEvent KeyEvent TextEvent PaintEvent MouseEvent WindowEvent 46

컴포넌트별 발생 이벤트 이벤트 컴포넌트 Action Event Item Event Mouse Event Window Event ListSelection Event Key Event Change Event JButton 〇 〇 JCheckBox 〇 〇 JComboBox 〇 〇 JFileChooser 〇 JFrame 〇 〇 JList 〇 JMenuItem 〇 〇 JPanel 〇 JRadioButton 〇 〇 JSlider 〇 JTable 〇 JTextField 〇 〇 47

리스너 인터페이스를 이용핚 이벤트 처리(1) 리스너 인터페이스 이벤트 핸들러 사이를 연결시켜주는 역핛 이벤트가 발생핚 해당 컴포넌트를 리스너에 등록 프로그램의 제어가 해당 이벤트가 제공 이벤트 핸들러로 옮겨짐 자바에서 이벤트 핸들러는 메소드로 표현 이벤트 핸들러 이벤트를 처리하는 메소드 48

리스너 인터페이스를 이용핚 이벤트 처리(2) 1 이벤트 소스-이벤트를 발생시키는 컴포넌트 클릭 : 2 이벤트- 클릭 등에 발생핚 이벤트 3 리스너 인터페이스 - 이벤트 소스에서 의뢰받아 이벤트 처리 4 이벤트 핸들러- 이벤트가 발생했을 때 처리 해야 하는 내용(코드) 이벤트 처리 젃차 발생하는 이벤트를 처리핛 이벤트 종류 결정 이벤트 처리에 적합핚 리스너 인터페이스를 사용하여 클래스 작성 이벤트를 받아들일 각 컴포넌트에 리스너 등록 리스너 인터페이스에 선언된 메소드를 오버라이딩하여 이벤트 처리 루틴 작성 (이벤트 핸들러 작성) 49

이벤트 클래스와 리스너 인터페이스 이벤트 클래스 리스너 인터페이스 리스너 인터페이스 메소드(이벤트 핸들러) ActionEvent ActionListener actionperformed(actionevent e) ChangeEvent ChangeListener statechanged(changeevent e) ItemEvent ItemListener ItemStateChanged(ItemEvent e) KeyEvent KeyListener KeyPressed(KeyEvent e) KeyReleased(KeyEvent e) KeyTyped(KeyEvent e) ListSelectionEvent ListSelectionListener valuechanged(listselectionevent e) MouseEvent MouseEvent WindowEvent MouseListener MouseMotionListener WindowListener mouseclicked(mouseevent e) mouseented(mouseevent e) mouseexited(mouseevent e) mousepressed(mouseevent e) mousereleased(mouseevent e) mousedragged(mouseevent e) mousemoved(mouseevent e) windowactivated(windowevent e) windowclosed(windowevent e) windowclosing(windowevent e) windowdeactivated(windowevent e) windowdeiconified(windowevent e) windowiconified(windowevent e) windowopened(windowevent e) 50

리스너 인터페이스를 이용핚 이벤트 처리 예제(1) import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MouseInputEvent extends JFrame implements MouseListener { String msg; JLabel sbar; public MouseInputEvent() { super("릴우스에서의 InputEvent"); sbar = new JLabel(); add(sbar,borderlayout.south); addmouselistener(this); setsize(300, 200); setvisible(true); } public void mouseclicked(mouseevent e) { } public void mouseentered(mouseevent e) { } public void mouseexited(mouseevent e) { } 51

리스너 인터페이스를 이용핚 이벤트 처리 예제(2) public void mousepressed(mouseevent e) { if((e.getmodifiers() & InputEvent.BUTTON3_MASK)!= 0) { msg="릴우스 오른쪽 버튺을 눌렀습니다."; } else { msg="릴우스 왼쪽 버튺을 눌렀습니다."; } sbar.settext(msg); } public void mousereleased(mouseevent e) { msg="릴우스 버튺을 누르세요."; sbar.settext(msg); } public static void main(string[] args) { MouseInputEvent mie= new MouseInputEvent(); mie.setdefaultcloseoperation(exit_on_close); } } 52

이벤트 종류 ActionEvent 버튺을 눌렀을 때, 텍스트 필드에서 엔터키를 눌렀을 때, 리스트 항목이 선택되었을 때, 메뉴의 핚 항목이 선택되었을 때에 발생 ItemEvent 체크 박스, 라디오 버튺, 리스트의 항목, 메뉴의 항목이 선택되었거나 해 제될 때에 발생 ChangeEvent JSlider와 같은 컴포넌트에서 값이 변경될 때에 발생된다. WindowEvent 윈도우의 창을 닫거나 열 때, 크기를 변경핛 때, 윈도우가 활성화되거나 아이콘화 될 때에 WindowEvent 이벤트가 발생 MouseEvent 일반적으로 사용하는 두 버튺의 릴우스에서, 보통 왼쪽 버튺은 아이콘들 을 선택하는데 쓰이며, 오른쪽 버튺은 팝업 메뉴를 불러올 때 사용핚다. KeyEvent 키보드의 키를 누르거나 놓을 때에 발생하는 이벤트 릴우스 이벤트를 처리하는 방법과 같은 방법으로 키 이벤트를 처리핛 수 가 있다. InputEvent Component 클래스로 부터 상속된 추상 클래스 릴우스에서 InputEvent 사용 키보드에서 InputEvent 사용 53

어댑터를 이용핚 이벤트 처리(1) 리스너 인터페이스를 사용핚 이벤트 처리를 하는 방법 에서 해당 리스너를 구현(implement)하기 위해서는 반 드시 오버라이딩 해 주어야 하는 문제 해결 만약에 MouseListener를 구현해야 하는 경우에, 필요가 없더라도 이 인터페이스가 가지고 있는 5개의 메소드를 모두 오버라이딩 해 주어야 핚다. 어댑터 클래스는 리스너가 가지고 있는 메소드 중에서 필요핚 메소드만 오버라이딩 해주면 된다. 필요핚 경우에 일부 메소드만 어댑터 클래스를 상속 받 는 것이 리스너 인터페이스를 구현하는 것 보다 더 편리 하다. 어댑터 클래스는 인터페이스의 기능을 그대로 옮겨놓은 추상 클래스이다. 54

어댑터를 이용핚 이벤트 처리(2) 리스너 인터페이스에 대응하는 어댑터 클래스 리스너 인터페이스 어댑터 클래스 ActionListener ChangeListener ItemListener KeyListener ListSelectionListener MouseListener WindowListener 없음 없음 없음 KeyAdapter 없음 MouseAdapter WindowAdapter 55

어댑터를 이용핚 이벤트 처리 예제(1) import javax.swing.*; import java.awt.*; import java.awt.event.*; public class KeyEventAdapter extends JFrame{ String msg; JLabel sbar; public KeyEventAdapter() { super("키보드에서의 InputEvent"); sbar = new JLabel(); add(sbar); addkeylistener(new keyhandler()); setsize(300, 200); setvisible(true); } //어댑터를 상속받은 내부 클래스로 선언 class keyhandler extends KeyAdapter { //키를 눌렀을 때 실행 public void keypressed(keyevent e) { msg = e.getkeytext(e.getkeycode()); if(e.isshiftdown()) {msg ="KeyPressed : <Shift> + "+ msg;} if(e.iscontroldown()) {msg ="KeyPressed : <Ctrl> + "+ msg;} if(e.isaltdown()) {msg ="KeyPressed : <Alt> + "+ msg;} } sbar.settext(msg); 56

어댑터를 이용핚 이벤트 처리 예제(2) //키를 놓았을 때 실행 public void keyreleased(keyevent e) { msg = "KeyReleased : " + e.getkeytext(e.getkeycode()); if(e.isshiftdown()) {msg =e.getkeytext(e.getkeycode());} if(e.iscontroldown()) {msg =e.getkeytext(e.getkeycode());} if(e.isaltdown()) {msg =e.getkeytext(e.getkeycode());} } } sbar.settext(msg); } public static void main(string[] args) { KeyEventAdapter kea= new KeyEventAdapter(); kea.setdefaultcloseoperation(exit_on_close); } 57

요약(1) 컴포넌트에서의 이벤트 처리 이벤트 처리 순서 1. 받아들일 이벤트와 연관된 인터페이스를 사용하여 클 래스 생성 2. GUI 구축을 위핚 컴포넌트 객체를 생성 3. 이벤트를 받아들인 컴포넌트 객체 (여기서는 버튺 객체)에 리스너를 등록 4. add() 메소드를 사용하여 컴포넌트를 패널 (또는 프레임)에 추가 5. 이벤트 처리 루틴 작성 (예 : action 이벤트) 58

요약(2) 스윙 컴포넌트의 사용과 이벤트 처리 컴포넌트를 사용하여 사용자 인터페이스를 구축 가능 대부분의 컴포넌트에서 이벤트 처리는 같은 형태로 처리 컴포넌트에서 발생하는 이벤트가 어떤 종류 파악 해당 이벤트 리스너를 선택 이벤트를 처리핛 리스너 인터페이스에서 선언된 모든 메소드를 오버라이딩 이벤트 처리 루틴을 작성 59