java - 鼠标监听器界面和绘画

标签 java swing mouseevent paint bufferedimage

我正在尝试实现一个图形建模工具。

Graphics modelling

单击鼠标时会生成红色顶点。当鼠标从一个顶点拖动到另一个顶点时,应绘制一条线。这就是我想要实现的目标。但我的代码并没有有效地做到这一点。以下是我的代码和问题

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/

相关文章:

java - 在三个类之间传递信息,抛出异常。 ( java )

java - eclipse中GUI界面异常

java - 滚动条没有被添加到面板

java - 防止 SWT 浏览器元素接收鼠标点击

Java根据鼠标点击绘制三个形状?

java - 独特的标签计数器

java - 使用 Spring Boot Maven 插件时,jar 文件中缺少 Spring Boot 应用程序中的资源

java - 在 JPanel 上绘制矩形

java - html 文件内内联后端代码

java - 了解是否在没有监听器的情况下单击了鼠标,或者采用了不同的方法