본문 바로가기
Technote/JAVA

9주차 6번문제

by Pooh0216 2009. 5. 9.

P9_6 마우스를 눌러 원을 그리는 프로그램을 작성하시오. 마우스 누름을 천천히 (더블클릭 아님!) 두 번 할 때마다 원이 하나씩 그려지게 하시오. 첫 번째 누름 위치는 원의 중심이 되고 두 번째 누르는 점은 원주 위에 있게 하시오. 새 원이 그려지면 기존 원은 없어집니다. 아래 뼈대를 참고하시오.

public class CircleComponentViewer{

public static void main(String[] args){

CircleComponent component = new CircleComponent();// 그림이 그려질 컴포넌트

// 컴포넌트를 인자로 삼아 마우스리스너 구성자를 호출함에 유의!

MouseListener listener = new MousePressListener(component);

component.addMouseListener(listener);// 마우스리스너를 컴포넌트에 등록

JFrame frame = new JFrame();

***********************

}

}

class MousePressListener implements MouseListener{

public MousePressListener(CircleComponent comp){

component = comp;

}

public void mousePressed(MouseEvent event){// 마우스가 눌려질 때마다 실행되는 메소드

int x = event.getX();// CircleComponent위에서 마우스 클릭된 위치를 알아냄

int y = event.getY();

if(clickCount==1){// 첫 클릭이면 그 좌표를 원의 센터로 기억하고 count 증가

*************// 컴포넌트의 setCenterPosition 메소드를 이용!

}else if(clickCount==2){// 두 번째 클릭이면 반지름 계산하여 원을 그리고 count를 1로 리셋

*************// 컴포넌트의 drawCircle 메소드를 이용!

}

}

public void mouseReleased(MouseEvent event) {}// 아무 일도 하지 않음

public void mouseClicked(MouseEvent event) {}// 아무 일도 하지 않음

public void mouseEntered(MouseEvent event) {}// 아무 일도 하지 않음

public void mouseExited(MouseEvent event) {}// 아무 일도 하지 않음

private CircleComponent component;

private int clickCount=1;

}

public class CircleComponent extends JComponent{

CircleComponent(){

setPreferredSize(new Dimension(400, 400));

ellipse = new Ellipse2D.Double();// 크기가 0인 원을 하나 만들어 저장

// 이것이 없으면 프로그램 시동시 처음 화면이 그려질 때 오류 발생!

}

public void setCenterPosition(int x, int y){

****************

}

public void drawCircle(int x, int y){

double radius = Math.sqrt(

Math.pow((double)(centerX - x), 2.0) +

Math.pow((double)(centerY - y), 2.0)

);// 반지름 계산: (centerX, centerY)와 (x, y) 사이의 거리

ellipse = new Ellipse2D.Double(*****************);

********// 그림이 새로이 그려지게 함, paintComponent 메소드가 실행되게 함

}

public void paintComponent(Graphics g){

super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;

*********// 컴포넌트에 원을 그림

}

private Ellipse2D.Double ellipse;

private int centerX;

private int centerY;

}


CircleComponent CircleComponentViewer

'Technote > JAVA' 카테고리의 다른 글

9주차 8번문제  (0) 2009.05.09
9주차 7번문제  (0) 2009.05.09
9주차 5번문제  (0) 2009.05.09
9주차 4번문제  (0) 2009.05.09
9주차 3번문제  (0) 2009.05.09