java 事件意料之外多次触发

java里给一个JButton对象设置了一个事件(actionPerformed),每一次点击跳出来一个弹框(JDialog)

第一次点会跳一个弹框,是正常的,但是关了弹框后,之后再点,点一次就会跳出来很多弹框,是哪出错了呀

会不会是你的监听器被重复注册,或者是第一次关闭弹窗后监听器没被移除掉呀。你可以检查一下你的监听器这块的代码。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

通常,像这样的任务会阻止其他任何事情的启动,因此最好在用于提交条目的按钮上按setEnabled(false)键。这将确保所有按钮单击都将被忽略。查询返回时只需调用someButton.setEnabled(true)。

我搜索了一些关于java里给一个JButton对象设置了一个事件(actionPerformed),每一次点击跳出来-个弹框(JDialog)第一次点会跳一个弹框,是正常的,但是关了弹框后,之后再点,点一次就会跳出来很多弹框,是哪出错了呀的相关信息,希望对你有帮助。😊
根据我找到的资料¹²³,这个问题可能是因为你在每次点击按钮时都创建了一个新的JDialog对象,而没有释放或隐藏之前的对象,导致弹出多个窗口。你可以尝试以下几种方法来解决这个问题:

  • 在创建JDialog对象时,使用setModal (true)方法,让对话框成为模态的,这样就可以阻止用户在关闭对话框之前再次点击按钮。
  • 在创建JDialog对象时,使用setDefaultCloseOperation (JDialog.DISPOSE_ON_CLOSE)方法,让对话框在关闭时自动释放资源,避免重复创建对象。
  • 在创建JDialog对象时,使用setLocationRelativeTo (null)方法,让对话框居中显示,这样就可以避免多个窗口重叠在一起看不清楚。
  • 在创建JDialog对象时,使用setVisible (false)方法,让对话框默认不可见,然后在按钮的事件监听器中使用setVisible (true)方法,让对话框在需要时才显示出来。
    以上就是一些解决方案,你可以根据自己的情况选择合适的方法。如果你还有其他问题,欢迎继续向我提问。😊
    (1) java:JDialog窗体(对话框,弹出的窗口) - CSDN博客. https://blog.csdn.net/qq_44925904/article/details/107372263.
    (2) JDialog弹窗(对话框) [Java]_96岁对抗java的博客-CSDN博客. https://blog.csdn.net/m0_57001006/article/details/122019267.
    (3) Java Swing Dialog 弹窗使用教程 - CSDN博客. https://blog.csdn.net/jarvan5/article/details/105638897.
    (4) undefined. https://blog.csdn.net/jarvan5/article/details/105621342%29.

使用标志判断是否已经创建了弹框

boolean isDialogVisible = false; // 标志是否已经创建了弹框

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        if (!isDialogVisible) {
            // 创建并显示弹框
            JDialog dialog = new JDialog();
            dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
            dialog.setVisible(true);

            isDialogVisible = true;
            
            // 处理弹框关闭事件
            dialog.addWindowListener(new WindowAdapter() {
                public void windowClosed(WindowEvent e) {
                    isDialogVisible = false; // 弹框关闭后更新标志状态
                }
            });
        }
    }
});

img