java - 鼠标事件经过组件

标签 java swing

我添加了一个简单的程序来说明。

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class SimpleInternalFrame extends Frame
{

  private static final long serialVersionUID = 1L;

  static JLayeredPane desktop;

  JInternalFrame internalFrame;

  public SimpleInternalFrame()
  {
    super("Internal Frame Demo");
    setSize(500, 400);


    Panel p = new Panel();


    add(p, BorderLayout.SOUTH);
    addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent e)
      {
        System.exit(0);
      }
    });


    desktop = new JDesktopPane();
    desktop.setOpaque(true);
    add(desktop, BorderLayout.CENTER);
  }


  public static void main(String args[])
  {
    SimpleInternalFrame sif = new SimpleInternalFrame();
    sif.setVisible(true);

    final JInternalFrame internalFrame = new JInternalFrame("Internal Frame 1", true, true, true, true);
    internalFrame.setBounds(50, 50, 300, 200);
    desktop.add(internalFrame, new Integer(1));
    JTextField tf = new JTextField();
    tf.addMouseListener(new MouseAdapter()
    {
      public void mouseClicked(MouseEvent evt)
      {

        System.out.println("Text Field " + evt.getClickCount());
      }
    });
    internalFrame.add(tf);
    internalFrame.setVisible(true);

    final JInternalFrame internalFrame2 = new JInternalFrame("Internal Frame 1", true, true, true, true);
    internalFrame2.setBounds(50, 50, 200, 100);
    desktop.add(internalFrame2, new Integer(1));
    JButton jb = new JButton("click me");
    jb.addMouseListener(new MouseAdapter()
    {
      public void mouseClicked(MouseEvent evt)
      {

        if (evt.getClickCount() == 1)
        {
          System.out.println("Button " + evt.getClickCount());
          internalFrame2.setVisible(false);
        }
      }
    });
    internalFrame2.add(jb);
    internalFrame2.setVisible(true);

  }
}

运行代码时,它将打开两个内部框架。一个有按钮。一个有文本字段。按钮将关闭第一个内部框架以供单击。

双击按钮。它将在文本字段中显示点击次数 2。 这是我们目前在项目中遇到的问题。实际项目中第二帧没有文本字段。它具有可在双击事件中工作的可点击项目。 这是我们目前遇到的问题。请帮助。

最佳答案

tf.addMouseListener(new MouseAdapter() {
    int cc;

    public void mouseClicked(MouseEvent evt) {
        int ccount = evt.getClickCount();
        if(ccount == 1 || ccount == cc+1) {
            cc = ccount;
            System.out.println("Text Field " + evt.getClickCount());
        }
    }
});

这将不止一次起作用。

另一种可能性是使用具有覆盖 processMouseEvent() 的组件:

public class SimpleInternalFrame extends Frame {
...
    private MouseEvent lastMouseEvent;

    public boolean checkEvent(MouseEvent e) {
        if(lastMouseEvent != null) {
            if(lastMouseEvent.getSource() != e.getSource()) {
                if(e.getClickCount() != 1) {
                    return false;
                }
            }
        }
        lastMouseEvent = e;
        return true;
    }

    class MTextField extends JTextField {
        protected void processMouseEvent(MouseEvent e) {
            if (checkEvent(e)) {
                super.processMouseEvent(e);
            }
        }
    }

    class MButton extends JButton {
        protected void processMouseEvent(MouseEvent e) {
            if (checkEvent(e)) {
                super.processMouseEvent(e);
            }
        }
    }

    public JTextField createText() {
        return new MTextField();
    }

    public MButton createButton() {
        return new MButton();
    }
} //end of SimpleInternalFrame 

创建组件:

final JTextField tf = sif.createText();
tf.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent evt) {
        System.out.println("Text Field " + evt.getClickCount());
    }
});

JButton jb = sif.createButton();
jb.setText("click me");
jb.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent evt) {
        if (evt.getClickCount() == 1) {
            internalFrame2.setVisible(false);
        }
    }
});

关于java - 鼠标事件经过组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31181631/

相关文章:

java - "Variable might not have been initialized"是什么意思?

java - 构造函数 Timer(int, ClockC.Listener) 未定义

java - JButton 出现在一台计算机上,但不在其他计算机上(BorderLayout)

java - 主类中的 Swing Timer 不会重新绘制 JFrame 类

java - JTable 和组合框。右键打开

java - 查找另一个元素内的所有 anchor 元素的 xpath 是什么?

java - Android Studio 将两个图像添加到一个按钮

java - 来自现有 jar 的 Eclipse 插件

java - 是否有 100% Java 替代 ImageIO 来读取 JPEG 文件?

java相同的ArrayList用于多表模型