- 벡터로 자료를 영구 보관시키고있슴

 - 마우스를 드래그한 범위를 선을 그림

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class LineDrawEx extends JFrame {
	
	public LineDrawEx(){
		setContentPane(new MyPanel());
		setSize(300,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	class MyPanel extends JPanel{
		Point startP = null;
		Point endP = null;
		
		public MyPanel(){
			this.addMouseListener(new MyMouseListener());
		}
		
		class MyMouseListener extends MouseAdapter{
			public void mousePressed(MouseEvent e){
				startP = e.getPoint(); // 클릭한부분을 시작점으로
			}
			public void mouseReleased(MouseEvent e){
				endP = e.getPoint(); // 드래그 한부분을 종료점으로
				Graphics g = getGraphics();
				g.drawLine(startP.x, startP.y, endP.x, endP.y);
			}
		}
	}
	
	public static void main(String[] args) {
		new LineDrawEx();
	}
}

이렇게 하게되면 드래그를 통해서 선은 그려지나..... 영구 보존되진않는다. 화면에 변화생기면 지워진다.
 


벡터를 이용해서 영구적 자료 보관하면서 그리기
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

public class LineDrawEx extends JFrame {
	
	public LineDrawEx(){
		setContentPane(new MyPanel());
		setSize(300,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	class MyPanel extends JPanel{
		Vector<Point> sv = new Vector<Point>(); // 시작
		Vector<Point> se = new Vector<Point>(); // 끝점
		
		public MyPanel(){
			this.addMouseListener(new MyMouseListener()); // 리스너
		}
		
		public void paintComponent(Graphics g){
			super.paintComponent(g); // 부모 페인트호출
			
			if(sv.size() == 0) // 벡터에 암것도없으면 리턴
				return;
			
			for(int i=0;i<sv.size();i++){ //벡터크기만큼
				Point sp = sv.get(i); // 벡터값을꺼내다
				Point ep = se.get(i);	
				g.drawLine(sp.x, sp.y, ep.x, ep.y);//그리다
			}
		}
		
		class MyMouseListener extends MouseAdapter{
			public void mousePressed(MouseEvent e){
				sv.add(e.getPoint()); // 클릭한부분을 시작점으로
			}
			public void mouseReleased(MouseEvent e){
				se.add(e.getPoint()); // 드래그 한부분을 종료점으로
				repaint(); // 다시그려라
			}
		}
	}
	
	public static void main(String[] args) {
		new LineDrawEx();
	}
}


기존 기능에서  마우스를찍고 드래그하는 위치를 보여주는 예쩨

 

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

public class LineDrawEx extends JFrame {
	
	public LineDrawEx(){
		setContentPane(new MyPanel());
		setSize(300,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	class MyPanel extends JPanel{
		
		Point startP=null;
		Point endP=null;
		
		Vector<Point> sv = new Vector<Point>(); // 시작
		Vector<Point> se = new Vector<Point>(); // 끝점

		public MyPanel(){
			//리스너를 공통으로해야  변수들이 공유된다.
			MyMouseListener ml = new MyMouseListener();
			
			this.addMouseListener(ml); // 리스너
			this.addMouseMotionListener(ml);
		}
		
		public void paintComponent(Graphics g){
			super.paintComponent(g); // 부모 페인트호출
			
			if(sv.size() != 0){
				for(int i=0;i<se.size();i++){ //벡터크기만큼
					Point sp = sv.get(i); // 벡터값을꺼내다
					Point ep = se.get(i);	
					g.drawLine(sp.x, sp.y, ep.x, ep.y);//그리다
				}
			}
			if(startP != null)
				g.drawLine(startP.x, startP.y, endP.x, endP.y);				
		}
		
		class MyMouseListener extends MouseAdapter implements MouseMotionListener{
			public void mousePressed(MouseEvent e){
				startP = e.getPoint();
				sv.add(e.getPoint()); // 클릭한부분을 시작점으로
			}
			public void mouseReleased(MouseEvent e){
				se.add(e.getPoint()); // 드래그 한부분을 종료점으로
				endP = e.getPoint();
				repaint(); // 다시그려라
			}
			
			public void mouseDragged(MouseEvent e){
				endP = e.getPoint();
				repaint();
			}
			
			public void mouseMoved(MouseEvent e){
				
			}
		}
	}
	
	public static void main(String[] args) {
		new LineDrawEx();
	}
}

 

블로그 이미지

맨오브파워

한계를 뛰어 넘어서..........

,