사용자가 선을 끌고 그릴 수있는 프로그램을 만들려고하고 또한 그 선을 그려서 삭제합니다. 내가 할 수있는 방법이 있니? 나는 선을 그리는 코드를 가지고 있지만 선을 그린 후에 선을 삭제할 수있는 방법이 확실하지 않습니다. 내가 그려진 선들 중 하나를 클릭하고 삭제 버튼으로 그것을 삭제하고자하는.선 그리기 및 선 삭제
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Drawing {
public Drawing() {
JFrame jf=new JFrame("Free Hand Drawing Example");
Board draw=new Board();
jf.add(draw);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(600,500);
jf.setVisible(true);
}
public static void main(String a[]){
new Drawing();
}
}
class Board extends JPanel implements MouseListener,MouseMotionListener {
ArrayList<pts> list = new ArrayList<pts>();
Point start,end;
public Board() {
start=null; /*Initializing*/
end=null;
//this.setBackground(Color.BLACK);
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
@Override
public void paint(Graphics g)
{ Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
super.paint(g2);
//g.setColor(Color.BLACK);
for (pts p : list)
g.drawLine((int)p.getStart().getX(), (int)p.getStart().getY(), (int)p.getEnd().getX(), (int)p.getEnd().getY());
if(start!=null)
{
g.drawLine(start.x,start.y,end.x,end.y);
}
}
@Override
public void mouseClicked(MouseEvent arg0) {}
@Override
public void mouseEntered(MouseEvent arg0) {}
@Override
public void mouseExited(MouseEvent arg0) {}
@Override
public void mousePressed(MouseEvent me) {
start = me.getPoint();
}
@Override
public void mouseReleased(MouseEvent me) {
end = me.getPoint();
pts pt = new pts(start,end);
list.add(pt);
repaint();
for(pts p : list)
{
System.out.println(p.getStart()+""+p.getEnd());
}
start = null;
end = null;
}
@Override
public void mouseDragged(MouseEvent me) {
end = me.getPoint();
repaint();
}
@Override
public void mouseMoved(MouseEvent arg0) {}
}
class pts{
Point start = null;
Point end = null;
public pts(Point start, Point end){
this.start = start;
this.end = end;
}
public Point getStart(){
return this.start;
}
public Point getEnd(){
return this.end;
}
}
안녕하세요, 미안 해요 나는 라인을 클릭하고 라인을 삭제하려고하는 것을 추가하는 것을 잊어 버렸습니다. 이 방법이 있습니까? – user1823986
답장을 보내 주셔서 감사합니다. 내가 마우스를 누른 채 마우스를 놓은 이유는 드래그하여 마우스를 놓는 선을 그려야하기 때문입니다. – user1823986
@Amir'MouseDragged'에 그려진 선을 "미리보기"하고 싶다면 선 만들기를 위해'MouseClick'을 가로 채는 것은 나쁜 생각 일 수 있습니다 ... – AlexR