java - 如何让鼠标点击时在图像上显示形状?

标签 java swing drawrect paintcomponent mouselistener

我的目标是单击鼠标时出现矩形。 这是我当前的代码片段:

    try{
            image = ImageIO.read(file);
            g.setColor(new Color(255,0,0));
            g.drawRect(x, y, 100, 100);
            }

    icon = new ImageIcon(image);
    label = new JLabel(icon);
    label.addMouseListener(this);

     public void mouseReleased(MouseEvent event) {
            // TODO Auto-generated method stub

            if(event.getSource() == label){

                x = event.getX();
                y = event.getY();

                repaint();

                input = JOptionPane.showInputDialog("Something:");
                System.out.println(input);
            }
        }

最佳答案

您可以扩展 JPanel 来完全执行您想要的操作:

class MyPanel extends JPanel{
    //....
    private java.awt.Rectangle rectangle = null;
    private Image imageToDraw;
    private Point imageLocation;
    public setImageToDraw(Image toDraw,Point p){
      imageToDraw=toDraw;
      imageLocation = p;
    }
    public void setRectangle(java.awt.Rectangle rectangle overlayRect){
       rectangle = overlayRect;
    }
    // Override paintComponent to draw image and rectangle
    @Override
    public void paintComponent(Graphics g) {
      g.drawImage(imageToDraw,imageLocation.getX(),imageLocation.getY(),this);
      if(rectangle != null) {
         // Draw your rectangle here...
      }
    }
}

在鼠标监听器中,执行以下操作:

// Declare a field of type MyPanel
private MyPanel drawingPanel = new MyPanel
// ... Initialization stuff...
drawingPanel.setImageToDraw(toDraw,p);
public void mouseReleased(MouseEvent event) {
        // TODO Auto-generated method stub
        if(event.getSource() == label){
           // Compute rectangle boundaries
           drawingPanel.setRectangle(overlayRect);
        }
        drawingPanel.repaint();
}

基本上,MyPanel 对象将始终具有要绘制的图像集。这样图像就一直绘制在面板上。当您想要一个覆盖矩形时,您所要做的就是设置 MyPanel.rectangle 字段并刷新您的 MyPanel 实例。这将首先重绘图像,然后在图像顶部绘制覆盖矩形。

关于java - 如何让鼠标点击时在图像上显示形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8200943/

相关文章:

java - 出现空白 JFrame 和无 JPanel 但已添加

java - 刷新 Swing 图形用户界面

objective-c - DrawRect 添加文字阴影

java - Bean 后处理器实现

java - GAE 不支持 com.sun.net.httpserver

java - Java 2D 中的可拖动矩形

ios - 将参数传递给 drawRect

java - 类型转换用括号括起来的原因

java - 当使用 String 文字创建 String 对象时调用哪个 String 类构造函数

ios - 不应该画画的时候..?