java - 在运行 ActionEvent 之前 GUI 没有在视觉上更新

标签 java swing user-interface swingworker actionevent

再详细说明一下,我有一个 GUI,如下所示:

enter image description here

然后我在 OK 按钮上有一个 Action 监听器,开始如下:

//OK Button Action Listener
private void okButtonActionPerformed(ActionEvent e) {   
    //Enable/Disable Buttons
    okButton.setEnabled(false);
    cancelButton.setEnabled(true);
    updateCheckbox.setEnabled(false);
    //Move on to a series of other methods here...

从理论上讲,这应该可以实现:

enter image description here

但是,相反,在完成所有方法和连接到 OK 按钮的其他事情之前,我得到以下信息:

enter image description here

这显然不可能发生,因为我们的想法是让取消按钮可用,而确定按钮和其他几个复选框在程序运行期间不可用(图 2),相反,它卡住在一个半态(图 3)。有什么办法可以解决这个问题吗?

最佳答案

每次从 GUI 执行逻辑时,您应该按以下方式使用 SwingWorker:

SwingWorker myWorker= new SwingWorker<String, Void>() {
    @Override
    protected String doInBackground() throws Exception {
        //Execute your logic
        return null;
    }
};
myWorker.execute();

如果您想从此逻辑中更新 GUI,请使用 InvokeLater:

SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        //To update your GUI
    }
});

有了这个,您可以确保您的逻辑和 GUI 保持响应。

编辑:

如果这更适合您的需要,您也可以使用 invokeAndWaitLink to related answer

关于java - 在运行 ActionEvent 之前 GUI 没有在视觉上更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17974940/

相关文章:

java - 如何使用 hashMap 设置行颜色?

java - 组布局 : JScrollPane in TextArea is not working

java - 在 Activity 期间更新 JLabel 的标签文本 - Swing

ios - 如何在 iOS/xcode 中重用颜色和样式?

java - 使用 Java 从 LDAP 检索 sidHistory

java - 快进实时 Java 模拟

java - Java 的 Swing 真的是 "memory hog"吗?

java - 如何在 JTextArea 中设置部分文本颜色?

java - 切换按钮与图像更改按钮

c++ - C++中创建文件对话框的跨平台方式