슬라이드 1

Similar documents
슬라이드 1

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

슬라이드 1

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63138C0E520C0CCBAA5C6AE20C3B3B8AE28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

PowerPoint Presentation

No Slide Title

Microsoft PowerPoint - 06-Chapter09-Event.ppt

11장.key

Microsoft PowerPoint - 04-UDP Programming.ppt

10장.key

Microsoft PowerPoint - 14주차 강의자료

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

Cluster management software

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

강의자료

PowerPoint Presentation

JAVA PROGRAMMING 실습 08.다형성

9장.key

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

<4D F736F F F696E74202D20C1A63230C0E520BDBAC0AE20C4C4C6F7B3CDC6AE203128B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

05-class.key

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - Java-03.pptx

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

Java Programing Environment

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

8장.그래픽 프로그래밍

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

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

Microsoft PowerPoint - Java7.pptx

PowerPoint Presentation

슬라이드 1

Chap12

PowerPoint 프레젠테이션

PowerPoint Presentation

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

PowerPoint Presentation

PowerPoint Presentation

ch09

제11장 프로세스와 쓰레드

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

Network Programming

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

PowerPoint Presentation

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

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 05. 객체의 활용

슬라이드 1

PowerPoint Presentation

JMF3_심빈구.PDF

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

Design Issues

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

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

오버라이딩 (Overriding)

Microsoft PowerPoint - 2강

PowerPoint Presentation

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

JAVA PROGRAMMING 실습 09. 예외처리

[ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 <LinearLayout 2 ~~~~ 중간생략 ~~~~ 3 android:orientation="vertical" > 4 <ImageView

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

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

rmi_박준용_final.PDF

Spring Boot/JDBC JdbcTemplate/CRUD 예제

02 C h a p t e r Java

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

Microsoft PowerPoint - Lect04.pptx

중간고사

Spring Boot

어댑터뷰

PowerPoint Presentation

PowerPoint Presentation

PowerPoint 프레젠테이션

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

슬라이드 1

비긴쿡-자바 00앞부속

Microsoft PowerPoint - RMI.ppt

슬라이드 1

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

11-GUI.key

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

PowerPoint 프레젠테이션

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

PowerPoint 프레젠테이션

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

PowerPoint 프레젠테이션

C++ Programming

PowerPoint 프레젠테이션

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

No Slide Title

슬라이드 1

Transcription:

12 장. GUI 학습목표 GUI 이벤트, 이벤트리스너와이벤트소스그림그리기내부클래스

창 Jframe 의모양 (Metal L&F) Jframe 의모양 (Aqua L&F)

창을만드는방법 1. 프레임 (JFrame) 만들기 JFrame frame = new JFrame(); 2. 위젯만들기 JButton button = new JButton( click me ); 3. 위젯을프레임에추가 frame.getcontentpane().add(button); 4. 화면에표시 frame.setsize(300, 300); frame.setvisible(true);

버튼 import javax.swing.*; public class SimpleGui1 { public static void main(string[] args) { JFrame frame = new JFrame(); JButton button = new JButton( click me ); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.getcontentpane().add(button); frame.setsize(300, 300); frame.setvisible(true);

이벤트 사용자가클릭했을때호출할메소드 public void changeit() { button.settext( I ve been clicked! ); 그메소드를언제실행시켜야할지알아내는방법 코드 Button 객체

리스너인터페이스 이벤트소스 (event source) 사용자의행동을이벤트로바꿔주는객체 java.awt.event 패키지 리스너 (listener) 인터페이스 리스너와이벤트소스를연결해주는다리역할을함 필요한이벤트유형에맞는리스너인터페이스를구현하면그이벤트를받아올수있습니다. ActionListener actionperformed(actionevent ev) ItemListener itemstatechanged(itemevent ev) KeyListener KeyPressed(KeyEvent ev) KeyReleased(KeyEvent ev) KeyTyped(KeyEvent ev)

리스너와소스 button.addactionlistener(this) actionperformed(theevent) Event 객체

ActionEvent를받는방법 1. ActionListener 인터페이스구현 2. 버튼에등록 3. 이벤트처리메소드구현 import javax.swing.*; import java.awt.event.*; public class SimpleGui1B implements ActionListener { JButton button; public static void main(string[] args) { SimpleGui1B = new SimpleGui1B(); gui.go(); public void go() { JFrame frame = new JFrame(); button = new JButton( click me ); button.addactionlistener(this); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.getcontentpane().add(button); frame.setsize(300, 300); frame.setvisible(true); public void actionperformed(actionevent ev) { button.settext( I ve been clicked! );

이벤트소스인지알아내는방법 API 문서를찾아보면됩니다. add 로시작하고 Listener 로끝나는이름을가지고리스너인터페이스인자를받아들이는메소드가있는지찾아보면됩니다. addkeylistener(keylistener k) addactionlistener(actionlistener a)

GUI에요소를추가하는방법 1. 프레임에위젯을집어넣는방법 frame.getcontentpane().add(mybutton); 2. 위젯에 2D 그래픽을그리는방법 graphics.filloval(70, 70, 100, 100); 3. 위젯에그림파일을집어넣는방법 graphics.drawimage(mypic, 10, 10, this);

그림을그리기위한위젯 JPanel 의하위클래스를만들고 paintcomponent() 라는메소드를오버라이드 paintcomponent() 메소드 시스템에서위젯을화면에표시하기위해호출하는메소드 그래픽관련코드는대부분여기에집어넣습니다. JVM 에서화면을갱신할때마다호출됩니다. 사용자가직접호출하는일은절대없습니다. 대신 repaint() 메소드를호출하면화면이갱신되면서이메소드가실행됩니다.

paintcomponent() import java.awt.*; import javax.swing.*; class MyDrawPanel extends JPanel { public void paintcomponent(graphics g) { g.setcolor(color.orange); g.fillrect(20, 50, 100, 100);

paintcomponent() JPEG 파일표시 public void paintcomponent(graphics g) { Image image = new ImageIcon( catzilla.jpg ).getimage(); g.drawimage(image, 3, 4, this); 그리기 public void paintcomponent(graphics g) { g.fillrect(0, 0, this.getwidth(), this.getheight()); int red = (int) (Math.random() * 255); int green = (int) (Math.random() * 255); int blue = (int) (Math.random() * 255); Color randomcolor = new Color(red, green, blue); g.setcolor(randomcolor); g.filloval(70, 70, 100, 100);

Graphics2D public void paintcomponent(graphics g) { g 매개변수는사실 Graphics2D 객체를참조함 Animal a = new Dog(); a.bark(); Dog d = (Dog) a; d.bark(); Graphics2D g2d = (Graphics2D) g;

이벤트를받아서그림을고쳐그리는방법

GUI 레이아웃 한프레임에두개이상의위젯을넣는방법 frame.getcontentpane().add(button); frame.getcontentpane().add(borderlayout.center, button); 북쪽 (NORTH) 서쪽 (WEST) 중앙 (CENTER) 동쪽 (EAST) 남쪽 (SOUTH)

버튼이두개있으면? 북쪽 (NORTH) 서쪽 (WEST) 중앙 (CENTER) 동쪽 (EAST) 남쪽 (SOUTH)

여러개의이벤트를처리하는방법 1. actionperformed() 메소드를두개구현 class MyGui implements ActionListener { public void actionperformed(actionevent ev) { frame.repaint(); public void actionperformed(actionevent ev) { label.setlabel( That hurt! );

여러개의이벤트를처리하는방법 2. 똑같은리스너를두버튼에모두등록 class MyGui implements ActionListener { public void go() { colorbutton = new JButton(); labelbutton = new JButton(); colorbutton.addactionlistener(this); labelbutton.addactionlistener(this); public void actionperformed(actionevnet ev) { if (event.getsource() == colorbutton) { frame.repaint(); else { label.setlabel( That hurt! );

여러개의이벤트를처리하는방법 3. 각버튼마다별도의 ActionListener 클래스제작 class MyGui { JFrame frame; JLabel label; void gui() { class ColorButtonListener implements ActionListener { public void actionperformed(actionevent ev) { frame.repaint(); class LabelButtonListener implements ActionListener { public void actionperformed(actionevent ev) { label.setlabel( That hurt! );

내부클래스 내부클래스 (inner class) 외부클래스에있는것을마음대로사용할수있음 class MyOuterClass { private int x; class MyInnerClass { void go() { x = 42;

내부클래스와외부클래스인스턴스 1. 외부클래스인스턴스를만듭니다. MyOuter 객체 2. 외부클래스의인스턴스를이용하여내부클래스의인스턴스를만듭니다. MyInner 객체 int x 3. 외부객체와내부객체는각별한사이가됩니다. 외부객체 String s 내부객체

내부클래스의인스턴스 일반클래스의인스턴스를만들때와똑같은식으로하면됩니다. class MyOuter { private int x; MyInner inner = new MyInner(); public void dostuff() { inner.go(); class MyInner { void go() { x = 42;

애니메이션 1. 특정좌표에객체를그림 g.filloval(20, 50, 100, 100); 2. 다른좌표에객체를서로그림 g.filloval(25, 55, 100, 100); 3. 좌표를바꿔가면서위의단계반복

애니메이션 class MyDrawPanel extends JPanel { public void paintcomponent(graphics g) { g.setcolor(color.orange); g.filloval(x, y, 100, 100); x, y 좌표는어디에서바꿀까? repaint() 는어디에서호출할까? 그림패널을내부클래스로 paintcomponent 에서순환문을쓰지않고

뮤직비디오 (?)

GUI와무관한이벤트 미디이벤트를받아서처리해야함 미디이벤트 (NOTE ON 이벤트 ) 를직접받아쓸수없음 ControllerEvent 라는이벤트를사용 첫번째박자 NOTE ON, ControllerEvent 두번째박자 NOTE OFF 세번째박자 NOTE ON, ControllerEvent 네번째박자 NOTE OFF

메시지를쉽게만드는방법 1. 메시지인스턴스만들기 ShortMessage first = new ShortMessage(); 2. SetMessage() 를호출하여지시사항전달 first.setmessage(192, 1, instrument, 0); 3. 메시지에대한 MidiEvent 인스턴스만들기 MidiEvent noteon = new MidiEvent(first, 1); 4. 이벤트를트랙에추가 track.add(noteon); ShortMessage a = new ShortMessage(); a.setmessage(144, 1, 44, 100); MidiEvent noteon = new MidiEvent(a, 1); track.add(noteon);

메시지 / 이벤트를만들기위한메소드 public static MidiEvent makeevent(int comd, int chan, int one, int two, int tick) { MidiEvent event = null; try { ShortMessage a = new ShortMessage(); a.setmessage(comd, chan, one, two); event = new MidiEvent(a, tick); catch(exception ex) { return event;

숙제 본문을꼼꼼하게읽어봅시다. 코드를전부입력해서실행시켜보고조금씩고쳐봅시다. 장중간및맨끝에나와있는모든연습문제를자기힘으로해결해봅시다. API 문서에서이장에나와있는클래스및메소드에대한내용을직접찾아봅시다.