我正在尝试实现一个图形建模工具。
单击鼠标时会生成红色顶点。当鼠标从一个顶点拖动到另一个顶点时,应绘制一条线。这就是我想要实现的目标。但我的代码并没有有效地做到这一点。以下是我的代码和问题
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 时,它也会生成按下和释放。特别是当使用三个以上顶点时,会生成错误的线。
我希望仅当按下一个顶点、移动到下一个顶点然后释放时才绘制线条。
如何解决这个问题?
最佳答案
在mouseReleased
中检查释放的位置,如果它与您的源
相同,则您可以点击而不是拖动。您还可以使用此方法完全摆脱mouseClicked
关于java - 鼠标监听器界面和绘画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19588608/