마우스로 다각형 그리기.

이번 글은 문제 풀이용 글입니다 -_-;

캔버스 예제를 만들어 했던 것 중에 좋은 예제가 있어서 캔버스 기초를 공부하는데 있어서 마지막 예제로 올릴까 합니다.

마우스로 다각형을 그리는 방법은 다음과 같습니다.
1. 캔버스 안에 마우스로 몇 회 정도 서로 다른 위치에 클릭을 합니다.
2. 그리기 버튼을 누르면 그림은 그려집니다.

힌트
1. 마우스로 클릭 할 때마다 해당 좌표를 기억해야 한다.
2. 삼각형, 사각형, 오각형...등 다각형 그리는 메소드를 활용한다.
3. 좌표를 기억할 때마다 마우스 클릭 수 또한 알 수 있도록 해야 한다.

자세한 힌트는 드래그 하시면 확인 가능합니다.
1. 백터를 이용하면 클릭한 수 만큼 백터에 저장 시키는 방법을 이용하면 다각형 그리기가 수월하다.
2. 마우스의 클릭을 이용해야 하므로 마우스 관련 리스너를 적절히 활용한다.



소스 보기(드래그 하세요 ~)
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class MouseTest extends Frame{
 
 Vector<XYpos> xy = new Vector<XYpos>();
 Canvas canvas = new Canvas();
 Button button = new Button("그리기");
 public MouseTest(){
  super("???");

  this.setSize(800,800);
  this.add(canvas,"Center");
  this.add(button,"South");
  this.setVisible(true);
  
  canvas.addMouseListener(new MouseAdapter(){
   public void mouseClicked(MouseEvent e){
    XYpos xypos = new XYpos();
    
    xypos.setX(e.getX());
    xypos.setY(e.getY());
    
    xy.add(xypos);    
   }
  });
  
  button.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {
    int x[] = new int[xy.size()];
    int y[] = new int[xy.size()];
    
    for(int i=0;i<xy.size();i++){
     XYpos xypos = xy.elementAt(i);
     x[i] = xypos.getX();
     y[i] = xypos.getY();
     System.out.println("좌표 x : "+x[i]);
     System.out.println("좌표 y : "+y[i]);
    }
    
    Graphics g = canvas.getGraphics();
    g.drawPolygon(x, y, xy.size());
    xy.clear();
   }
   
  });
  
  this.addWindowListener(new WindowAdapter(){
   public void windowClosing(WindowEvent e){
    System.exit(0);
   }
  });
 }
 
 public static void main(String[] args) {
  new MouseTest();
 }
}

class XYpos{
 private int x;
 private int y;
 
 public void setX(int x){
  this.x = x;
 }
 public int getX(){
  return this.x;
 }
 public void setY(int y){
  this.y = y;
 }
 public int getY(){
  return this.y;
 }
}


by 만성피로 | 2008/10/30 13:46 | 정리할 자료들 | 트랙백 | 덧글(1)

트랙백 주소 : http://maydaisy.egloos.com/tb/1029877
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 김교수 at 2008/11/07 16:03
좋은 예제네요.

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶