グラフィックモデリングツールを実装しようとしています。
マウスをクリックすると、赤い頂点が生成されます。ある頂点から別の頂点にマウスをドラッグすると、線が描画されます。これが私が達成したいことです。しかし、私のコードは効果的にそれを行いません。以下は私のコードと問題です
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
public class NewClass extends JPanel {
Point source,dest;
BufferedImage image;
Graphics2D imageGraphics;
NewClass(){
image= new BufferedImage(400,400, BufferedImage.TYPE_INT_ARGB);
imageGraphics=image.createGraphics();
this.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
if(e.getButton() == MouseEvent.BUTTON1){
Point p=e.getPoint();
paintPoint(p);
}
}
@Override
public void mousePressed(MouseEvent e){
if(e.getButton() == MouseEvent.BUTTON1){
source=e.getPoint();
}
}
@Override
public void mouseReleased(MouseEvent e){
if(e.getButton() == MouseEvent.BUTTON1){
dest=e.getPoint();
paintLine();
}
}
});
}
public void paintPoint(Point r){
imageGraphics.setColor(Color.red);
imageGraphics.fillOval(r.x,r.y,5,5);
repaint();
}
public void paintLine(){
imageGraphics.setColor(Color.black);
imageGraphics.drawLine(source.x,source.y,dest.x,dest.y);
repaint();
}
}
ただし、私が直面している問題は、mouseClickedEvent が生成されると、pressed と release も生成されることです。特に 3 つ以上の頂点を使用すると、間違った線が生成されます。
頂点を押して次の頂点に移動し、そこで離したときにのみ線を描画したい。
この問題はどのように解決できますか?