자바 고수님들 좀 부탁드립니다ㅜㅜㅜㅜㅜㅜ
-
게시물 수정 , 삭제는 로그인 필요
p11_5 마우스를 클릭하면 그 위치로 작은 사각형이 이동하도록 하는 프로그램을 작성하시오. 사각형의 왼쪽 위 모서리가 마우스 클릭 위치로 오게 하시오. 아래 그림을 참고하시오.
p11_6 마우스를 눌러 원을 그리는 프로그램을 작성하시오. 마우스 클릭 (더블클릭 아님!) 두 번째마다 원이 하나씩 그려지게 하시오. 첫 번째 클릭 위치는 원의 중심이 되고 두 클릭 사이 거리가 원의 반지름이 되게 하시오. 새 원이 그려지면 기존 원은 없어집니다. 아래 뼈대를 참고하시오.
package pp11_6;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
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();
frame.add(component);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
class MousePressListener implements MouseListener{
public MousePressListener(CircleComponent comp){
component = comp;
}
public void mousePressed(MouseEvent event){// 마우스가 눌려질 때마다 실행되는 메소드
// CircleComponent위에서 마우스 클릭된 위치를 알아냄
// 첫 클릭이면 그 좌표를 원의 센터로 기억하도록 CircleComponent에게 지시하고 count 증가
// 두 번째 클릭이면 원을 그리도록 CircleComponent에게 지시하고 count를 1로 리셋
}
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;
}
package p11_6;
import javax.swing.JComponent;
import java.awt.geom.Ellipse2D;
import java.awt.*;
public class CircleComponent extends JComponent{
CircleComponent(){
// CircleComponent의 크기를 지정
// ellipse 초기화
}
public void paintComponent(Graphics g){...}
public void setCenterPosition(int x, int y){
// centerX, centerY 지정
}
public void drawCircle(int x, int y){
// 반지름 계산
// ellipse 구성
// 그림이 새로이 그려지게 함, paintComponent 메소드가 실행되게 함
}
private Ellipse2D.Double ellipse;
private double centerX;
private double centerY;
}
참고: CircleComponent의 크기를 지정하는 법
CircleComponent는 JComponent의 서브클래스이기 때문에 JComponent로부터 상속한 메소드를 지원합니다. API 문서를 찾아보면 JComponent에는 아래와 같은 메소드가 있습니다. 이 메소드를 이용하면 됩니다.
void
setPreferredSize(Dimension preferredSize)
Sets the preferred size of this component.
이 메소드를 호출할 때는 Dimension을 인자로 주어야 합니다. Dimension을 API 문서에서 찾아보면 아래와 같은 구성자가 있음을 알 수 있습니다.
Dimension(int width, int height)
Constructs a Dimension and initializes it to the specified width and specified height.
결국 CircleComponent의 크기를 설정해 주려면 아래와 같이 적어줍니다.
setPreferredSize(new Dimension(400, 400));
이 문제 2개를 풀어보려고 했는데 너무 어려워서 못풀겠네요ㅜㅜ 고수님들의 도움좀 부탁드립니다.
소스코드좀 부탁드려요ㅜㅜㅜㅜㅜㅜㅜㅜㅜ
p11_5 마우스를 클릭하면 그 위치로 작은 사각형이 이동하도록 하는 프로그램을 작성하시오. 사각형의 왼쪽 위 모서리가 마우스 클릭 위치로 오게 하시오. 아래 그림을 참고하시오.
p11_6 마우스를 눌러 원을 그리는 프로그램을 작성하시오. 마우스 클릭 (더블클릭 아님!) 두 번째마다 원이 하나씩 그려지게 하시오. 첫 번째 클릭 위치는 원의 중심이 되고 두 클릭 사이 거리가 원의 반지름이 되게 하시오. 새 원이 그려지면 기존 원은 없어집니다. 아래 뼈대를 참고하시오.
package pp11_6;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
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();
frame.add(component);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
class MousePressListener implements MouseListener{
public MousePressListener(CircleComponent comp){
component = comp;
}
public void mousePressed(MouseEvent event){// 마우스가 눌려질 때마다 실행되는 메소드
// CircleComponent위에서 마우스 클릭된 위치를 알아냄
// 첫 클릭이면 그 좌표를 원의 센터로 기억하도록 CircleComponent에게 지시하고 count 증가
// 두 번째 클릭이면 원을 그리도록 CircleComponent에게 지시하고 count를 1로 리셋
}
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;
}
package p11_6;
import javax.swing.JComponent;
import java.awt.geom.Ellipse2D;
import java.awt.*;
public class CircleComponent extends JComponent{
CircleComponent(){
// CircleComponent의 크기를 지정
// ellipse 초기화
}
public void paintComponent(Graphics g){...}
public void setCenterPosition(int x, int y){
// centerX, centerY 지정
}
public void drawCircle(int x, int y){
// 반지름 계산
// ellipse 구성
// 그림이 새로이 그려지게 함, paintComponent 메소드가 실행되게 함
}
private Ellipse2D.Double ellipse;
private double centerX;
private double centerY;
}
참고: CircleComponent의 크기를 지정하는 법
CircleComponent는 JComponent의 서브클래스이기 때문에 JComponent로부터 상속한 메소드를 지원합니다. API 문서를 찾아보면 JComponent에는 아래와 같은 메소드가 있습니다. 이 메소드를 이용하면 됩니다.
void |
setPreferredSize(Dimension preferredSize) Sets the preferred size of this component. |
이 메소드를 호출할 때는 Dimension을 인자로 주어야 합니다. Dimension을 API 문서에서 찾아보면 아래와 같은 구성자가 있음을 알 수 있습니다.
Dimension(int width, int height)
Constructs a Dimension and initializes it to the specified width and specified height.
결국 CircleComponent의 크기를 설정해 주려면 아래와 같이 적어줍니다.
setPreferredSize(new Dimension(400, 400));
이 문제 2개를 풀어보려고 했는데 너무 어려워서 못풀겠네요ㅜㅜ 고수님들의 도움좀 부탁드립니다.
소스코드좀 부탁드려요ㅜㅜㅜㅜㅜㅜㅜㅜㅜ