본문 바로가기

프로그래밍/자바소스 및 자료

[자바소스] 마우스로 연속된 선 그리기


좌표 0.0으로부터 마우스로 점을 찍을때마다
선이 연결되어 그려지는 소스입니다.

불필요한 부분이 있습니다.
잘 활용하시길 바라겠습니다.
너무 급하게 만들었던거라. 이보다 더 잘 만드실 수 있을겁니다.

1. MouseDemoPanel.java 파일입니다.
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;

/** MouseDemoPanel.java by F. M. Carrano  LISTING 17-7
    Marks and reports the location of mouse clicks.
*/
public class MouseDemoPanel extends JPanel
{
 private int mouseX, mouseY;
 private int PostX, PostY;              //마우스 클릭 이전값 저장
 private final JLabel messageOut;
 private int count=0;                   //얼마만큼 마우스를 눌렀는지 세어줍니다.
 private static final int PANEL_WIDTH = 300;
 private static final int PANEL_HEIGHT = 200;

     // size and color of dot to mark mouse location
 private static final int RADIUS = 2;
   private static final int DIAMETER = 2 * RADIUS;
 private static final Color DOT_COLOR = Color.BLUE;
 
 public MouseDemoPanel()
 {
      mouseX = 0;
      mouseY = 0;
  messageOut = new JLabel();
  add(messageOut);
  addMouseListener(new ClickListener()); // listen for mouse clicks
  setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
 } // end default constructor
 
 //페인트 컴포넌트 부분을 바꿧습니다.
   public void paintComponent(Graphics pen)
   {
      // paint dot centered at mouse click
      pen.setColor(DOT_COLOR);
    pen.fillOval(mouseX - RADIUS, mouseY - RADIUS, DIAMETER, DIAMETER);
   if(count==1){
    pen.drawLine(0, 0, mouseX, mouseY);
    PostX=mouseX;
    PostY=mouseY;
    System.out.println("2");
   }
   else if(count>1){
    pen.drawLine(PostX, PostY, mouseX, mouseY);
    PostX=mouseX;
    PostY=mouseY;
    System.out.println("3");
   }
   } // end paintComponent
     
    // Listens for mouse clicks
 private class ClickListener implements MouseListener
 {
  public void mouseClicked(MouseEvent click)
  {
         // the mouse button has been clicked on this panel;
   // get coordinates of mouse click
   count++;
   mouseX = click.getX();
   mouseY = click.getY();
   
   System.out.println("1");
        repaint();
  } // end mouseClicked
  
      // Ignore these actions on this panel:
  public void mousePressed(MouseEvent e) {}
  public void mouseReleased(MouseEvent e){}  
  public void mouseEntered(MouseEvent e) {}
  public void mouseExited(MouseEvent e)  {}
 } // end ClickListener
} // end MouseDemoPanel

2. MouseDemoDriver.java 파일입니다.
import javax.swing.JFrame;

/** MouseDemoDriver.java by F. M. Carrano  LISTING 17-8
    A driver for the class MouseDemoPanel.
*/
public class MouseDemoDriver
{
 public static void main(String[] args)
 {
  JFrame window = new JFrame();
  window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  window.setTitle("Mouse Demo");
  
  MouseDemoPanel panel = new MouseDemoPanel();
  window.add(panel);
  window.pack();
  window.setVisible(true);
 } // end main
} // end MouseDemoDriver