【问题标题】:How To use MouseClicked event to prevent mouseExited event?如何使用 MouseClicked 事件来阻止 mouseExited 事件?
【发布时间】:2021-01-11 14:04:44
【问题描述】:

我有一个简单的 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);

【问题讨论】:

    标签: java user-interface mouseevent mouseover mouseclick-event


    【解决方案1】:

    我认为它与仅可用于 mouseClicked 事件的变量有关吗?我将如何解决这个问题。

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

    //boolean check = false;
    check = false;
    

    编辑:

    在封闭范围内定义的局部变量检查必须是最终的或有效的最终

    开始重写你的整个类,让它有一个更好的结构。

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

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

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

    【讨论】:

    • “在封闭范围内定义的局部变量检查必须是最终的或有效的最终”我也不知道如何解决这个问题,尽管如此
    • @MyCupOfTea,见编辑。注意 保持方便的教程链接。它包含大多数 Swing 基础知识的示例。
    • 谢谢!我改为停用按钮并使用 if b.isEnabled 而不是 check
    • @MyCupOfTea,。您的代码结构有缺陷,将来会导致问题。所以即使你决定启用/禁用按钮,你的代码仍然需要重写。
    猜你喜欢
    • 1970-01-01
    • 2011-11-19
    • 2021-02-27
    • 2021-12-11
    • 1970-01-01
    • 2014-01-31
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多