12. GUI – 그래픽 이야기.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

6 장 객체 - 지향 설계 ③. 목차 GUI 레이아웃  전화기 키 패드 전화기 키 패드 전화기 키 패드 모양의 GUI 를 만드는 Telephone.java, TelephonePanel.java 를 완성해 보자.  주석을 참고하여 TelephonePanel.java.
명품 JAVA Essential.
어서와 Java는 처음이지! 제20장 실전프로젝트 #2.
그래픽 프로그래밍 (GUI - Graphic User Interface)
순차, 조건, 반복 이점숙 농대 뒷편 언덕을 넘어가며 같은 문제 다르게 해결 순차, 조건, 반복 이점숙
순차, 조건, 반복 이점숙 같은 문제 다르게 해결하기 순차, 조건, 반복 이점숙
CHAP 19. 구글맵.
GUI 이벤트, 이벤트 리스너와 이벤트 소스 그림 그리기 내부 클래스
149개의 실습예제로 배우는 Flash 8.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
최윤정 Java 프로그래밍 클래스 상속 최윤정
레이아웃 관리자 스윙 구성요소 비트박스 프로그램
컴퓨터 프로그래밍 실습 #7 제 4 장 GUI 클래스 작성.
GUI 환경에서 작동하는 프로그램에 대하여 윈도우 프로그램의 작성 방법 그래픽과 이미지 디스플레이 방법 오디오 파일 재생 방법
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
Part 5 사용자 인터페이스 Chapter 14 : 그래피컬 사용자 인터페이스 Chapter 15 : 이벤트 처리
제 4 장 클래스 작성 Lab 4- 2.
Power Java 제19장 배치 관리자(Layout Manager).
Choi Younghwan CSE HUFS
7장 배열 ②.
19장 스윙과 이벤트 처리 Section 1 스윙 컴포넌트 Section 2 이미지 아이콘과 라벨
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
9장 다형성 Lab 9-2.
10장 예외 Lab 10-2.
07. 메뉴와 대화상자 제목. 07. 메뉴와 대화상자 제목 메뉴를 작성하고 사용하는 방법을 배운다. 토스트의 다양한 출력 방법을 알아본다. 대화상자의 사용법을 익힌다.
5장 조건과 반복 ③.
7주차 Android Application.
Communication and Information Systems Lab. 황재철
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
두근두근 파이썬 수업 13장 객체란 무엇인가요?.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
Power Java 제14장 배치 관리자.
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
그래픽 사용자 인터페이스와 사건처리.
Lesson 7. 클래스와 메소드 - 1.
컴퓨터 프로그래밍 : 실습3 2장 데이터와 식.
자바 5.0 프로그래밍.
CHAP 12. 리소스와 보안.
7장 인터페이스와 추상 클래스.
JAVA Canvas Swing.
10장 tkinter로 GUI 만들기.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Clipping 이진학.
자바 5.0 프로그래밍.
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
JA A V W. 06.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
11. 어댑터뷰 제목. 11. 어댑터뷰 제목 리스트뷰와 그리드뷰 활용법을 배운다. 갤러리와 스피너의 사용법을 익힌다.
제 4 장 클래스 작성 Lab 4- 2.
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
9 브라우저 객체 모델.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
Power Java 제14장 배치 관리자.
5장 조건과 반복 ③.
자바 객체 지향 프로그래밍 Ps lab 김윤경.
Power Point 예제 디자인 적용 (서식) - (디자인적용) - (원하는 디자인 선택)
CHAP 5. 메뉴와 대화상자.
BoardGame 보드게임 따라가기.
Presentation transcript:

12. GUI – 그래픽 이야기

GUI 만들기 프레임(JFrame)을 만든다. 위젯(버튼, 텍스트 등)을 만든다. 위젯을 프레임에 추가한다. JFrame frame = new JFrame(); JFrame은 화면 위에 있는 창(window)을 나타내는 객체 위젯(버튼, 텍스트 등)을 만든다. JButton button = JButton(“click me”); 위젯 – 각종 구성요소(component) Javax.swing 패키지에서.. 위젯을 프레임에 추가한다. frame.getContentPane().add(button); 프레임은 창을 둘러싸고 있는 테두리. 실제 위젯을 추가할 때는 틀(pane)에.. 화면에 표시한다. (크기를 다음 화면에 표시하도록 설정) frame.setSize(300, 300); frame.setVisible(true); Head First JAVA

GUI - 버튼 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); } 버튼을 만들고 버튼에 텍스트 전달 프레임의 크기를 픽셀 단위로 지정 화면에 표시되도록 Head First JAVA

사용자 이벤트 사용자가 버튼을 클릭했을 때 어떤 특정한 일을 하게 만들려면??? 코 드 사용자가 클릭했을 때 호출할 메소드 (버튼을 클릭했을 때 해야 할 행동) 그 메소드를 언제 실행시켜야 할지 (사용자가 버튼을 클릭했는지) button 코 드 버튼의 이벤트에 관심이 있다는 것을 알려줘야 함 Button 객체 Head First JAVA

사용자 이벤트 버튼의 이벤트에 관심이 있다는 것을 알려주는 인터페이스를 구현하면 된다. ActionListener 사용자가 의미 있는 행동을 하면 이벤트 소스에서 이벤트 객체를 생성. 이벤트를 받아 오는 이벤트 리스너를 만들어야 함. <<인터페이스>> ActionListener actionPerformed(ActionEvent ev) <<인터페이스>> ItemListener itemStateChanged(ItemEvend ev) <<인터페이스>> KeyListener KeyPressed(KetEven ev) KeyReleased(KetEven ev) KeyTyped(KetEven ev) 모든 이벤트 유형마다 그 유형에 맞는 리스너 인터페이스가 있음. 어떤 인터페이스를 구현하겠다고 선언했으면 그 인터페이스에 있는 모든 메소드를 구현해야 함. Head First JAVA

이벤트를 받는 방법 import javax.swing.*; import java.awt.event.*; // 리스너와 이벤트 패키지를 사용하기 위한 public class SimpleGui1B implements ActionListener { JButton button; public static void main(String[] args) { SimpleGui1B gui = new SimpleGui1B(); gui.go(); } public void go() { JFrame frame = new JFrame(); button = new JButton("click me"); button.addActionListener(this); frame.getContentPane().add(button); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 300); frame.setVisible(true); public void actionPerformed(ActionEvent event) { button.setText("I've been clicked!"); 리스너 인터페이스를 구현하고 버튼에 등록한 뒤 이벤트 처리 메소드를 등록한다. 인터페이스 구현 버튼에서는 ActionListener를 구현한 클래스에만 이벤트를 보냄 버튼에 등록. 이 때 전달하는 인자는 반드시 ActionListener를 구현한 클래스의 객체여야 함 ActionListener 인터페이스의 실제 이벤트를 처리하는 actionPerformed 메소드 구현 // 버튼에서는 이 메소드를 호출하여 이벤트가 일어났다는 것을 알려줌 Head First JAVA

리스너, 소스, 이벤트 리스너 이벤트 소스 이벤트 객체 : 인터페이스를 구현하고 버튼에 등록하고 이벤트 처리 코드를 제공. 이벤트를 받는 역할. 이벤트 소스 : 리스너로부터 등록을 받고 사용자로부터 이벤트를 받아서 이벤트 처리 메소드를 호출. 이벤트를 보내는 역할. 이벤트 객체 : 이벤트콜백메소드(이벤트 소스에서 이벤트가 일어났을 때 호출함으로써 이벤트 리스너에 그 이벤트가 일어났음을 알려주기 위한 메소드)에 대한 인자고, 이벤트에 대한 데이터를 리스너한테 돌려주는 역할. 이벤트에 대한 데이터가 들어있음. Head First JAVA

GUI에 뭔가를 집어넣는 방법 위젯에 2D 그래픽을 그린다. 위젯에 JPEG를 집어넣는다. 프레임에 위젯을 집어넣는 방법 : 버튼, 메뉴, 라디오 버튼 등의 위젯을 집어넣는다. frame.getContentPane().add(myButton); javax.swing에는 십여 개가 넘는 위젯 유형이 포함되어 있다. 위젯에 2D 그래픽을 그린다. : 그래픽 객체를 사용하여 도형을 그릴 수 있다. graphics.fillOval(70, 70, 100, 100); java2D API에는 여러가지 특이하고 복잡한 그래픽 메소드가 있다. 위젯에 JPEG를 집어넣는다. : 위젯에 그림을 집어넣을 수도 있다. graphics.drawImage(myPic, 10, 10, this); Head First JAVA

paintComponent()라는 메소드를 오버라이드 하면 된다. 그림을 그릴 패널 만들기 JPanel의 하위클래스를 만들고 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); } 둘 다 있어야 함 프레임에 추가할 수 있는 위젯인 JPanel의 하위클래스를 만듬. 사용자 주문형 위젯 객체에 그림을 그릴 때 사용할 색 지정 이 메소드는 시스템에서 직접 호출하는데 그림을 그리기 위한 도화지 역할. Graphics 유형의 인자를 객체를 인자로 전달 위치와 크기의 좌표 Head First JAVA

paintComponent() (1/2) JPEG 파일 표시 public void paintComponent(Graphics g) { Image image = new ImageIcon(“catzilla.jpg”).getImage(); g.drawImage(image, 3, 4, this); } 파일명 지정 부분 그림의 좌표를 나타냄. Ex) 패널의 맨 왼쪽에서 세 픽셀, 맨 위쪽에서 네 픽셀 떨어진 지점을 그림의 왼쪽 맨 윗부분으로 지정. 이 숫자는 전체 프레임이 아닌 위젯에 대한 상대적 위치 Head First JAVA

paintComponent() (2/2) 검은 색 배경에 임의의 색의 원 그리기 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); } 패널 전체를 검은색(기본 색)으로 패널의 크기와 같은 직사각형 그림 빨, 녹, 파의 성분을 나타내는 정수 세 개를 전달하여 색을 만듦 다음과 같은 위치와 크기로 타원을 생성 Head First JAVA

Graphics 레퍼런스는 Graphics2D를 참조한다. Graphics2D g2d = (Graphics2D) g; Dog 객체를 Animal 레퍼런스 변수로 참조하였을 때 bark() 메소드를 호출할 수 없었듯이 Graphics 레퍼런스도 많은 Graphics2D 객체의 메소드를 호출할 수 없다. Graphics drawImage() drawLine() drawPolygon() drawRect() drawOval() fillRect() fillRoundRect() setColor() Graphics2D fill3DRect() draw3DRect() rotate() scale() shear() transform() setRenderingHints() Graphics2D g2d = (Graphics2D) g; Head First JAVA

Graphics2D (2/2) 원을 단색이 아닌 그래디언트로 Graphics 객체의 탈을 쓴 Graphics2D 객체 원을 단색이 아닌 그래디언트로 public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g; GradientPaint gradient = new GradientPaint(70, 70, Color.blue, 150, 150, Color.orange); g2d.setPaint(gradient); g2d.fillOvall(70, 70, 100, 100); } Graphics에는 없고 Graphics2D에만 있는 것을 호출하려면 캐스트 해야 함 시작 점과 색 끝 점과 색 현재 지정된 gradient 색으로 타원을 채워 생성 Head First JAVA

핵심정리 (1/4) GUI를 만들 때는 우선 창을 만들어야 하는데 보통 JFrame을 사용 JFrame frame = new JFrame(); JFrame에 위젯(버튼, 텍스트 등)을 추가할 때는 다음과 같이 한다. Frame.getContentPane().add(button); JFrame에는 다른 위젯을 직접 추가할 수 없기 때문에 JFrame의 내용 틀(content pane)에 추가해야 한다. 창을 화면에 표시하려면 크기를 지정한 다음 화면에 나타나게 설정해야 한다. frame.setSize(300, 300); frame.setVisible(true); Head First JAVA

핵심정리 (2/4) 사용자가 언제 버튼을 클릭하는지 알아내려면 GUI 이벤트가 일어나는지 지켜봐야 한다. 이벤트가 일어나는지 지켜보려면 이벤트 소스에 등록해야 한다. 리스너 인터페이스는 이벤트 소스에서 이벤트를 받아서 처리하는 메소드를 호출할 수 있는 방법을 제공한다. 이벤트 소스에 등록할 때는 소스의 등록 메소드를 호출하면 된다. Ex> 버튼의 ActionEvent에 등록하고 싶다면 button.addActionListener(this); 리스너 인터페이스를 구현할 때는 그 인터페이스에서 선언한 모든 이벤트 처리 메소드를 구현해야 한다. Head First JAVA

핵심정리 (3/4) 이벤트 처리 메소드로 전달된 이벤트 객체에는 이벤트의 소스에 대한 정보를 포함한 이벤트에 대한 정보가 들어 있다. 위젯에 2차원 그래픽을 직접 그릴 수 있다. .gif나 .jpeg 파일을 위젯에 직접 그릴 수도 있다. 그래픽을 직접 만들고 싶다면 JPanel의 하위클래스를 만든 다음 paintComponent() 메소드를 오버라이드 하면 된다. paintComponent() 메소드는 GUI 시스템에서 호출하고 사용자가 직접 호출하는 일은 절대 없다. Head First JAVA

핵심정리 (4/4) paintComponent()의 Graphics 매개변수로 참조하는 객체는 사실 Graphics2D 클래스의 인스턴스이다. Graphics2D 클래스에는 다양한 메소드가 들어 있다. Graphics2D 메소드를 호출하려면 매개변수를 Graphics 객체에서 Graphics2D 객체로 캐스트 해야 한다. Graphics2D g2d = (Graphics2D) g; Head First JAVA

GUI 레이아웃 (1/3) frame.getContentPane().add(button); 북쪽(NORTH) 서쪽 (WEST) 프레임의 기본 내용 틀에 위젯을 추가할 때는 항상 그 위젯을 어디에 넣어야 할지를 지정해야 한다. 인자가 하나뿐인 add 메소드를 호출하면 위젯은 자동으로 중앙 지역으로 들어간다. 서쪽 (WEST) 중앙 (CENTER) 동쪽 (EAST) 남쪽(SOUTH) frame.getContentPane().add(BorderLayout.CENTER, button); Head First JAVA

GUI 레이아웃 (2/3) 버튼을 클릭할 때마다 원의 색이 바뀌도록… import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SimpleGui3C implements ActionListener { JFrame frame; public static void main(String[] args) { SimpleGui3C gui = new SimpleGui3C(); gui.go(); } public void go() { frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton button = new JButton("Change colors"); button.addActionListener(this); // 리스너를 버튼에 추가 MyDrawPanel drawPanel = new MyDrawPanel(); frame.getContentPane().add(BorderLayout.SOUTH, button); frame.getContentPane().add(BorderLayout.CENTER, drawPanel); frame.setSize(300, 300); frame.setVisible(true); 버튼과 그림 패널을 프레임의 두 지역에 추가 Head First JAVA

GUI 레이아웃 (3/3) public void actionPerformed(ActionEvent event) { frame.repaint(); } class MyDrawPanel extends JPanel { 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); } // 타원을 무작위적으로 선택한 색으로 칠하기 위한 코드 사용자가 버튼을 클릭하면 프레임의 repaint() 메소드를 호출하는데 그러면 그 프레임에 들어있는 모든 위젯의 paintComponent() 메소드가 호출됨 Head First JAVA