요즘 며칠동안 공부중인 캔버스 프리드로우 버전입니다영..^^

1단계 : 그냥 캔버스에 간단한 마우스 이벤트를 통한 프리드로우입니다.

2단계 : 1단계를 해보니 할 때마다 다시 페인트를 해서 번쩍번쩍 거림..쓰레드 구현 필요(우리 수업도 빨리 쓰레드,Db,IO가 나가야 할텐데..벌써 한달이 지났엉..==;)

3단계 : 이걸 DB든 파일이든 직렬화 저장해서 정말 스마트폰에 있는 그림메모처럼 만드는 게 목표.

최종단계 : 이걸 그대로 안드로이드폰에 옮겨봄...ㅋ

 

암튼 현재 1단계 성공..

 

소스첨부하니 참고하실 분 보세요.


import java.awt.BasicStroke;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.ArrayList;

import javax.swing.JFrame;


public class DrawTest extends JFrame {
 MyCanvas canvas;
 ArrayList<Vortex> list;
 public DrawTest(){
  super("DrawTest");
  
  System.out.println("DrawTest 시작");
  
  list = new ArrayList<Vortex>();
  
  canvas = new MyCanvas();
  
  canvas.setBackground(Color.WHITE);
  
  canvas.addMouseListener(new MouseAdapter(){
   public void mousePressed(MouseEvent me){
    
    list.add(new Vortex(me.getX(),me.getY(),false));
    
    
   }   
  });
  canvas.addMouseMotionListener(new MouseMotionAdapter(){
   public void mouseDragged(MouseEvent me){

    list.add(new Vortex(me.getX(),me.getY(),true));

    canvas.repaint();

   }
  });
  this.add(canvas);
  
  this.setSize(300,300);
 
 }
 
 class Vortex{
  float x;
  float y;
  boolean isDraw;
  public Vortex(float x,float y,boolean isDraw){
   this.x = x;
   this.y = y;
   this.isDraw = isDraw;   
  }
 }
 class MyCanvas extends Canvas{
  
  public void paint(Graphics g){
   
   Graphics2D g2d = (Graphics2D)g;

         g2d.setStroke(new BasicStroke(2));    // 선 굵기 설정

   int size = list.size();
   
   for(int i=0;i<size;i++){
    
    Vortex tex = (Vortex)list.get(i);
    
    if(tex.isDraw){
     
     g.drawLine((int)list.get(i-1).x, (int)list.get(i-1).y,
       (int)list.get(i).x, (int)list.get(i).y);
    }
   }
   
  }
 }
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  new DrawTest().setVisible(true);
 }

}

+ Recent posts