如何使用 MouseClicked 事件来防止 mouseExited 事件?

How To use MouseClicked event to prevent mouseExited event?

我有一个简单的 java swing 代码,其中当按钮悬停并单击时文本字段会发生变化,但是当我使用变量来停用 mouseExited 事件时,它不起作用并继续更改文本字段。我认为它与仅对 mouseClicked 事件可用的变量有关?我将如何解决这个问题。谢谢

我的导入是 java.awt 和 javax.swing

public static void main(String[] args) {
        boolean check = true;
        JFrame f =new JFrame("ActionListener Example");  
        JTextField tf = new JTextField("You should press button 1");  
        tf.setBounds(100,100, 150,20);  
        JButton b=new JButton("Click Here");  
        b.setBounds(50,100,60,30);  
        //2nd step
        b.addMouseListener(new MouseListener() {
        @Override
        public void mouseClicked(MouseEvent e) {
            tf.setText("you did it");
            boolean check = false;
        }
        @Override
        public void mousePressed(MouseEvent e) {
            // TODO Auto-generated method stub  
        }
        @Override
        public void mouseReleased(MouseEvent e) {
            // TODO Auto-generated method stub  
        }
        @Override
        public void mouseEntered(MouseEvent e) {
            tf.setText("DO IT!");   
        }
        @Override
        public void mouseExited(MouseEvent e)  {
            if (check) {
                tf.setText("You should press the button");
                }
        }});
        f.setLayout(new FlowLayout());
        f.setSize(400,400);  
        f.add(b);
        f.add(tf);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);

I think its to do with the variable only being available to the mouseClicked event? How would i fix this.

然后不要在 mouseClicked 方法中定义第二个“check”变量。

//boolean check = false;
check = false;

编辑:

Local variable check defined in an enclosing scope must be final or effectively final

开始重写整个 class 以提供更好的结构。

阅读 How to Use Buttons... 上的 Swing 教程部分。下载ButtonDemo代码并修改。

演示代码将向您展示如何构建代码,以便

  1. 所有代码均未包含在 main() 方法中:
  2. 您使用布局管理器
  3. 您在事件调度线程 (EDT) 上创建 GUI
  4. 您的 class 可以使用“实例”变量,而不是局部变量。您“检查”变量将是一个实例变量。