当前位置: 首页 > 知识库问答 >
问题:

JoptionPane.ShowMessageDialog要等到单击OK了吗?

暨修洁
2023-03-14

这可能是我忽略的一件非常简单的事情,但我似乎就是想不出来。

我有以下更新JTable的方法:

class TableModel extends AbstractTableModel {    
        public void updateTable() {
            try {
                // update table here
             ...
    } catch (NullPointerException npe) {
                isOpenDialog = true;
                JOptionPane.showMessageDialog(null, "No active shares found on this IP!");
                isOpenDialog = false;
            }
        }
    }

但是,在按下消息对话框上的OK按钮之前,我不希望ISOpenDialogboolean设置为false,因为如果用户按下enter,它将激活textfield上的KeyListener事件,如果设置为false,它将再次触发整个代码块。

部分KeyListener代码如下所示:

public class KeyReleased implements KeyListener {
        ...

    @Override
    public void keyReleased(KeyEvent ke) {
        if(txtIPField.getText().matches(IPADDRESS_PATTERN)) {
            validIP = true;
        } else {
            validIP = false;
        }

        if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
            if (validIP && !isOpenDialog) {
                updateTable();
            }
        }
    }
}

共有1个答案

邹弘
2023-03-14

JOptionPane创建一个模态对话框,因此按照设计,在处理完对话框(按下其中一个按钮或按下关闭菜单按钮)之前,不会调用它之外的行。

更重要的是,您不应该使用KeyListener来执行这种操作。如果您希望JTextField监听enter键的按下,请向其添加ActionListener。

 类似资料:
  • 我被困在一个有硒等待的情况下。我正在使用硒爪哇和cucumber。点击一个按钮,一个新的页面加载,但内容还不能点击。当页面加载到背面时,将显示一个灰色屏幕阻止器,以便在加载整个页面之前使其不可编辑。所以我不能使用waitforpageload或wait for element使其可见,因为它们都返回true,因为元素在后台可用。我尝试使用一个条件来检查元素是否可点击,以确保页面完全加载。但那也没用

  • 我正在做一个forEach循环,它对Cloudinary进行API调用,我正在用响应数据构建一个数组。 一旦收集到数据,我需要将其发送到其他API。 在发送数据之前,我如何等待promise得到解决并收集数据? 这是我的代码:

  • 在我的程序中,它将单击浏览器中的一个按钮,并且在该页面中,应该会出现另一个按钮。出现该按钮后,我的程序将立即运行下一个操作来单击下一个按钮。我目前收到此错误: ElementNotVisibleException:消息:元素不可见 因此,我假设我正在调用该操作,以便在该按钮出现之前单击下一个按钮。我的问题是,我该怎么做才能让我的程序等到我可以点击按钮,再点击按钮? 这就是我的程序底部的代码的样子。

  • 问题内容: JOptionPane.showMessageDialog应该是获取用户反馈的有用工具,因为它在您等待时会阻塞当前线程。 因此,我希望它是线程安全的,并且您不需要将调用包装在invokeLater或invokeAndWait中。 是这样吗 问题答案: 取自javax.swing包描述: Swing的线程策略 通常,Swing不是线程安全的。除非另有说明,否则所有Swing组件和相关类都

  • 在Flutter中,当使用< code>showDatePicker时,为什么不立即接受按下的日期值(不必按OK)? 例如,如果小部件最初在2019年9月10日打开,我想选择2019年10月5日,我希望将月份切换到10月,然后从日历显示中按5,日历显示将自动接受日期为2019年十月5日,而无需按OK按钮。 有没有办法避免按下OK按钮?