9장 다형성 Lab 9-2.

Slides:



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

6 장 객체 - 지향 설계 ③. 목차 GUI 레이아웃  전화기 키 패드 전화기 키 패드 전화기 키 패드 모양의 GUI 를 만드는 Telephone.java, TelephonePanel.java 를 완성해 보자.  주석을 참고하여 TelephonePanel.java.
프로그래밍 개론 Ⅰ 제 3장. 클래스와 객체의 사용 ①.
12. GUI – 그래픽 이야기.
명품 JAVA Essential.
어서와 Java는 처음이지! 제20장 실전프로젝트 #2.
명품 JAVA Programming 제 11 장 스윙 컴포넌트와 이벤트 핸들링.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
10. 예외 처리.
그래픽 프로그래밍 (GUI - Graphic User Interface)
Ch.22 Command Pattern 장 덕 성 계명대학교 컴퓨터공학과 정보공학실험실
9장. 스윙 프로그래밍.
GUI 이벤트, 이벤트 리스너와 이벤트 소스 그림 그리기 내부 클래스
149개의 실습예제로 배우는 Flash 8.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Java 16장. 스윙 public class SumTest {
최윤정 Java 프로그래밍 클래스 상속 최윤정
7장 배열 ③.
레이아웃 관리자 스윙 구성요소 비트박스 프로그램
명품 JAVA Programming 제 13 장 스레드와 멀티태스킹.
컴퓨터 프로그래밍 실습 #7 제 4 장 GUI 클래스 작성.
GUI 환경에서 작동하는 프로그램에 대하여 윈도우 프로그램의 작성 방법 그래픽과 이미지 디스플레이 방법 오디오 파일 재생 방법
명품 JAVA Essential.
명품 JAVA Programming.
8장 상속 ②.
Part 5 사용자 인터페이스 Chapter 14 : 그래피컬 사용자 인터페이스 Chapter 15 : 이벤트 처리
10장 예외 Lab 10-1.
Lab 2 Guide: 교재 3장 그래픽 예제 ( 쪽) - 펜과 브러시로 그리기 - 튀는 공
제 4 장 클래스 작성 Lab 4- 2.
9장 AWT(1).
Power Java 제19장 배치 관리자(Layout Manager).
명품 JAVA Programming 제 12 장 그래픽.
어서와 Java는 처음이지! 제8장 그래픽 사용자 인터페이스.
Choi Younghwan CSE HUFS
7장 배열 ②.
Swing 컴포넌트 텍스트 컴포넌트 텍스트 필드 텍스트 영역 스크롤 페인 체크 박스 라디오 버튼.
Lesson 5. 레퍼런스 데이터형.
프로그래밍 개론 Ⅰ 제 3장. 클래스와 객체의 사용 ②.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
10장 예외 Lab 10-2.
5장 조건과 반복 ③.
명품 JAVA Essential.
9장 AWT(1).
명품 JAVA Programming 제 15 장 애플릿과 멀티미디어.
Communication and Information Systems Lab. 황재철
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
Power Java 제14장 배치 관리자.
그래픽 사용자 인터페이스와 사건처리.
Java 6장. 클래스 : 속성 public class SumTest {
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
4 장 클래스 작성.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
JA A V W. 06.
객체기반 SW설계 팀활동지 4.
제 4 장 클래스 작성 Lab 4- 2.
Outline 클래스의 해부 캡슐화(Encapsulation) 메쏘드의 해부 그래픽 객체(Graphical Objects)
윤 홍 란 4 장 클래스 작성 윤 홍 란
Chapter 4 클래스 작성.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
Power Java 제14장 배치 관리자.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
5장 조건과 반복 ③.
자바 객체 지향 프로그래밍 Ps lab 김윤경.
Chapter8 : 인터페이스와 패키지 8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용
Presentation transcript:

9장 다형성 Lab 9-2

목차 색상 선택자 움직이는 원 색칠하기 슬라이더 속도 조절

움직이는 원 색칠하기 CirclePanel을 수정한다. 버튼을 눌렀을 때 원의 색이 바뀌도록 한다. 버튼을 만들고, 적절한 label을 붙인다. ColorListener 클래스를 추가한다. 버튼을 눌렀을 때, 원의 색을 바꾸고 repaint한다. 각 버튼마다 리스너를 추가하고, 버튼과 리스너를 연결한다. 색상 버튼을 위한 패널을 만들어 버튼을 붙인다. 색상 패널을 주 패널의 북쪽에 붙인다.

움직이는 원 색칠하기(Cont.) “Choose Color” 버튼을 추가한다. 다른 색상 버튼의 가운데 둔다. 이 버튼은 JColorChooser를 부른다. 버튼을 눌렀을 때 선택한 색이 원의 색이 된다. ColorListener를 사용한다. 사용자가 색상을 선택하고자 할 때, null을 전달한다. actionPerformed()에서 color가 null일 때 JColorChooser를 호출한다. JColorChooser는 showDialog()를 호출한다. 파라미터 3개 : 다이얼로그 상자에 대한 부모 컴포넌트 다이얼로그 상자 프레임의 제목 초기 색상

움직이는 원 색칠하기(Cont.) //************************************************************************* // MoveCircle.java // GUI를 보여주기 위해 CirclePanel을 사용한다. import java.awt.*; import javax.swing.*; public class MoveCircle { //-------------------------------------------------------------------- // GUI frame을 구성한다. public static void main(String[] args) JFrame frame = new JFrame("MoveCircle"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setPreferredSize(new Dimension(400,300)); frame.getContentPane().add(new CirclePanel(400,300)); frame.pack(); frame.setVisible(true); }

움직이는 원 색칠하기(Cont.) //************************************************************************* // CirclePanel.java // 원을 이동하는 버튼과 원을 포함하는 패널. import java.awt.event.*; import java.awt.*; import javax.swing.*; public class CirclePanel extends JPanel { private final int CIRCLE_SIZE = 50; private int x, y; private Color c; //-------------------------------------------------------------------- // 원, 원을 이동하는 버튼을 구성. public CirclePanel(int width, int height) x = (width/2) - (CIRCLE_SIZE/2); y = (height/2) - (CIRCLE_SIZE/2); c = Color.green; this.setLayout(new BorderLayout());

움직이는 원 색칠하기(Cont.) JButton left = new JButton("Left"); JButton right = new JButton("Right"); JButton up = new JButton("Up"); JButton down = new JButton("Down"); left.addActionListener(new MoveListener(-20,0)); right.addActionListener(new MoveListener(20,0)); up.addActionListener(new MoveListener(0,-20)); down.addActionListener(new MoveListener(0,20)); JPanel buttonPanel = new JPanel(); buttonPanel.add(left); buttonPanel.add(right); buttonPanel.add(up); buttonPanel.add(down); this.add(buttonPanel, "South"); }

움직이는 원 색칠하기(Cont.) //-------------------------------------------------------------------- // 패널에 원을 그린다. public void paintComponent(Graphics page) { super.paintComponent(page); page.setColor(c); page.fillOval(x, y, CIRCLE_SIZE, CIRCLE_SIZE); } // 원을 이동하는 버튼에 대한 감청자를 표현한다. private class MoveListener implements ActionListener private int dx; private int dy;

움직이는 원 색칠하기(Cont.) //---------------------------------------------------------------- // 이동할 원의 위치를 매개변수로 받는다. public MoveListener(int dx, int dy) { this.dx = dx; this.dy = dy; } // x, y 좌표를 바꾼다. public void actionPerformed(ActionEvent e) x += dx; y += dy; repaint();

속도 조절 Jslider 객체를 구성한다. Jslider 선언 초기화한다. 큰 눈금 표시는 40, 작은 눈금 표시는 10. Horizontal 값 : 0 – 200 초기값 : 30 큰 눈금 표시는 40, 작은 눈금 표시는 10. setPaintTicks(true), setPaintLabels(true) setAlignmentX(Component.LEFT_ALIGNMENT)

속도 조절(Cont.) SliderListener를 수정한다. 슬라이더의 label을 추가한다. stateChanged()를 완성한다. 슬라이더의 값을 결정하고, 그 값으로 타이머 delay를 결정한다. 타이머 delay는 타이머 클래스의 메소드 setDelay(int delay)를 사용한다. Jslider 객체에 리스너를 추가한다. 슬라이더의 label을 추가한다. “Timer Delay”, 왼쪽 정렬

속도 조절(Cont.) Jpanel객체를 생성한다. 원이 패널 아래쪽으로 사라지는 문제점을 해결해본다. Label과 슬라이더를 붙인다. 주 패널의 남쪽에 붙인다. 원이 패널 아래쪽으로 사라지는 문제점을 해결해본다. actionPerformed()에 slidePanelHt(int형)을 선언한다. getSize()를 이용하여 패널의 높이를 위의 변수에 저장한다. 예) 패널의 이름이 slidePanel일 때 slidePanelHt = slidePanel.getSize().height;

속도 조절(Cont.) – SpeedControl.java //************************************************************************* // SpeedControl.java // 슬라이더로 공의 속도를 조절하는 제어 패널을 표현한다. import java.awt.event.*; import java.awt.*; import javax.swing.*; public class SpeedControl { //-------------------------------------------------------------------- // 프레임을 구성한다. public static void main(String[] args) JFrame frame = new JFrame("Bouncing Balls"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(new SpeedControlPanel()); frame.pack(); frame.setVisible(true); }

속도 조절(Cont.) – SpeedControlPanel.java //************************************************************************* // SpeedControlPanel.java // // 튀는 공을 표현하기 위한 패널. import java.awt.event.*; import java.awt.*; import javax.swing.*; import javax.swing.event.*; public class SpeedControlPanel extends JPanel { private final int WIDTH = 600; private final int HEIGHT = 400; private final int BALL_SIZE = 50; private Circle bouncingBall; private Timer timer; private int moveX, moveY;

속도 조절(Cont.) – SpeedControlPanel.java //-------------------------------------------------------------------- // 타이머를 표함한 패널을 구성. public SpeedControlPanel() { timer = new Timer(30, new ReboundListener()); this.setLayout(new BorderLayout()); bouncingBall = new Circle(BALL_SIZE); moveX = moveY = 5; // 슬라이더 객체를 구성한다. setPreferredSize(new Dimension(WIDTH, HEIGHT)); setBackground(Color.black); timer.start(); }

속도 조절(Cont.) – SpeedControlPanel.java //-------------------------------------------------------------------- // 공을 그린다. public void paintComponent(Graphics page) { super.paintComponent(page); bouncingBall.draw(page); } //************************************************************************* // 타이머의 감청자. public class ReboundListener implements ActionListener // 튀는 공의 위치를 업데이트한다. public void actionPerformed(ActionEvent action) bouncingBall.move(moveX, moveY);

속도 조절(Cont.) – SpeedControlPanel.java int x = bouncingBall.getX(); int y = bouncingBall.getY(); if (x < 0 || x >= WIDTH - BALL_SIZE) moveX = moveX * -1; repaint(); } //************************************************************************* // 슬라이더 감청자. private class SlideListener implements ChangeListener { //-------------------------------------------------------------------- // 슬라이더가 변경되었을 때 호출. public void stateChanged(ChangeEvent event)

속도 조절(Cont.) – CirclePanel.java //************************************************************************* // CirclePanel.java // // 원을 이동하는 버튼과 원을 포함하는 패널. import java.awt.event.*; import java.awt.*; import javax.swing.*; public class CirclePanel extends JPanel { private final int CIRCLE_SIZE = 50; private int x, y; private Color c; //-------------------------------------------------------------------- // 원, 원을 이동하는 버튼을 구성. public CirclePanel(int width, int height) x = (width/2) - (CIRCLE_SIZE/2); y = (height/2) - (CIRCLE_SIZE/2);

속도 조절(Cont.) – CirclePanel.java c = Color.green; this.setLayout(new BorderLayout()); JButton left = new JButton("Left"); JButton right = new JButton("Right"); JButton up = new JButton("Up"); JButton down = new JButton("Down"); left.addActionListener(new MoveListener(-20,0)); right.addActionListener(new MoveListener(20,0)); up.addActionListener(new MoveListener(0,-20)); down.addActionListener(new MoveListener(0,20)); JPanel buttonPanel = new JPanel(); buttonPanel.add(left); buttonPanel.add(right); buttonPanel.add(up); buttonPanel.add(down); this.add(buttonPanel, "South"); }

속도 조절(Cont.) – CirclePanel.java //-------------------------------------------------------------------- // 패널에 원을 그린다. public void paintComponent(Graphics page) { super.paintComponent(page); page.setColor(c); page.fillOval(x, y, CIRCLE_SIZE, CIRCLE_SIZE); } // 원을 이동하는 버튼에 대한 감청자를 표현한다. private class MoveListener implements ActionListener private int dx; private int dy;

속도 조절(Cont.) – CirclePanel.java //---------------------------------------------------------------- // 이동할 원의 위치를 매개변수로 받는다. public MoveListener(int dx, int dy) { this.dx = dx; this.dy = dy; } // x, y 좌표를 바꾼다. public void actionPerformed(ActionEvent e) x += dx; y += dy; repaint();

속도 조절(Cont.) – Circle.java //************************************************************************* // Circle.java // // 원을 표현 import java.awt.*; import java.util.Random; public class Circle { private int x, y; private int radius; private Color color; static Random generator = new Random();

속도 조절(Cont.) – Circle.java //-------------------------------------------------------------------- // 무작위로 원을 생성한다. // 반지름 : 25 - 74 // 색상 : RGB 0 - 16777215(24 비트) // x 좌표 : 왼쪽 위모서리 0 - 599 // y 좌표 : 왼쪽 위모서리 0 - 399 public Circle() { radius = Math.abs(generator.nextInt())%50 + 25; color = new Color(Math.abs(generator.nextInt())%16777216); x = Math.abs(generator.nextInt())%600; y = Math.abs(generator.nextInt())%400; }

속도 조절(Cont.) – Circle.java //-------------------------------------------------------------------- // 주어진 크기로 원 생성. public Circle(int size) { radius = Math.abs(size/2); color = new Color(Math.abs(generator.nextInt())%16777216); x = Math.abs(generator.nextInt())%600; y = Math.abs(generator.nextInt())%400; } // 원을 그린다. public void draw(Graphics page) page.setColor(color); page.fillOval(x, y, radius*2, radius*2);

속도 조절(Cont.) – Circle.java // 원의 위치를 옮긴다. public void move(int over, int down) { x = x + over; y = y + down; } // x좌표를 반환한다. public int getX() return x; // y좌표를 반환한다. public int getY() return y;