在运行 ActionEvent 之前 GUI 不会在视觉上更新

2024-04-14

为了详细说明一下,我有一个如下所示的 GUI:

然后我在“确定”按钮上有一个动作侦听器,其开头如下:

//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...

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

然而,相反,我得到以下信息,直到所有方法和连接到“确定”按钮的其他内容完成:

这显然不可能发生,因为我们的想法是让取消按钮可用,而确定按钮和其他几个复选框在程序运行期间不可用(图 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 保持响应。

Edit:

你也可以使用invokeAndWait如果这更适合您的需求。相关答案链接 https://stackoverflow.com/a/3173041/1611957

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在运行 ActionEvent 之前 GUI 不会在视觉上更新 的相关文章

随机推荐

  • 如何在打字中安装express?

    我正在尝试在我的应用程序中使用expressjs 安装后使用typings install express ambient save I run tsc 但我收到两个错误 types main ambient express index d
  • 使用 OpenCV 对非正面图像进行人脸检测

    我正在尝试使用 opencv 来检测人脸 脸部不是正面 相机从侧面拍摄脸部 因此只能看到一只眼睛和部分嘴巴 我尝试了具有多种配置的 HaarDetectObjects 但没有获得任何好处 我改变了级联并进行了测试 haarcascade f
  • 在折线图中的特定点添加标记

    我正在绘制一个绘图线图 并希望使用标记突出显示线图上的特定点 其中数据框中的另一列不是 NA 此外 当我将鼠标悬停在绘图上时 我只想查看位于标记点上的 y 值 而不是绘图的其余部分 这是一个可重现的示例 到目前为止我已经尝试做到这一点 li
  • 使用 Python 检测 OpenCV 中的线条和形状

    我一直在使用 OpenCV cv2 并检测线条和形状 假设我女儿画了一幅图画 如下所示 我正在尝试编写一个Python脚本来分析绘图并将其转换为硬线条 形状 例如 话虽这么说 我已经安装了 opencv 并尝试使用它 但除了能够在图像中绘制
  • 如何设置扭曲的日志记录级别?

    我正在使用带有twisted的autobahn包 它会在每次连接到websocket时显示调试消息 我尝试将日志记录级别切换为信息但没有成功 import logging logging basicConfig level logging
  • 如何通过 Java 运行我的 haskell 函数

    假设我有一个 haskell 函数add in math hs 我怎样才能运行add通过Java程序运行函数并将输出存储为变量 也许像下面这样 public int runHaskell String haskellFile int out
  • 如何在 MATLAB 中编写向量化函数

    我刚刚学习MATLAB 我发现很难理解循环与矢量化函数的性能因素 在我之前的问题中 MATLAB 中的嵌套 for 循环非常慢 预分配 https stackoverflow com q 7811239 518169我意识到使用向量化函数与
  • 从传递给 C# 的 F# 列表中检索项目

    我在 C 中有一个在 F 中调用的函数 将其参数传递到Microsoft FSharp Collections List 如何从 C 函数中的 F 列表中获取项目 EDIT 我找到了一种 函数式 风格的方式来循环它们 并且可以将它们传递给如
  • docker-compose 构建镜像或构建上下文[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想构建自定义 Dockerfile 但我收到以下消息 gt Starting build app ERROR The Compose f
  • iText 列表项或 JTextArea 中的行间距

    我需要在 GUI 中同步 PDF 列表项和 JTextArea 的行距 我可以通过调整其中之一来做到这一点 在列表项 或 JTextArea 超过一行 在 JTextArea 中将换行设置为 true 之前 这一切都运行良好 我可以调整两个
  • 根据属性检查 firebase 是否存在现有对象,防止重复

    我想检查我的 firebase 看看我是否已经存储了一个与两个属性匹配的对象 为了将这个问题放在上下文中 想象一个仅存储歌曲的应用程序 具有 艺术家 和 歌曲名 等属性 如下所示 var wishlist new Firebase http
  • 在 Windows 10 家庭版 docker-compose.yml 文件中设置卷

    尝试设置 docker 以便当我在 Windows 计算机上更改项目文件时 它们会在我的 docker 容器中更新 从这个问题 https stackoverflow com questions 41925212 changing my p
  • 如何按日期在 R 中对大型数据框 (ffdf) 进行子集化?

    我正在尝试按日期对 FFDF 进行子集化 下面 我使用普通数据框成功创建了这样的子集 但我需要一些帮助才能将其应用到 FFDF 我的尝试以及错误消息都列在代码注释中 提前谢谢了 Create a normal data frame in p
  • 如何保持片段视图状态?

    我对碎片系统有疑问 我有两个片段 例如A and B 如果我搬家A to B Navigation findNavController v navigate R id B Now A片段 onDestroyView 被称为我知道这是正常的
  • 使用 Imagick 将图像从 RGB 转换为 CMYK

    我正在尝试将 RGB 图像转换为 CMYK 因为它们需要打印 我正在使用这段代码
  • JavaScript 中 /// 是什么意思?

    双正斜杠 是 JavaScript 中的注释 但是三重正斜杠是什么意思 意思是 我问的原因是当我删除具有以下内容的行时代码会中断 这让我相信 不是评论 可能是一个参考指令 https stackoverflow com questions
  • 使用 Bluebird 进行 Mongoose 承诺的正确方法是什么?

    我一直在阅读文档和文章 每个人似乎都描述了一起使用 Mongoose 和 Bluebird 的不同方式 甚至 Mongoose 官方文档说了些什么 http mongoosejs com docs promises html蓝鸟文档说另一件
  • BOOST_LIKELY 和 __builtin_expect 仍然相关吗?

    我明白所解释的内容here https stackoverflow com questions 7346929 why do we use builtin expect when a straightforward way is to us
  • ListBox MVVM 中的清除选择

    在 MVVM Silverlight 应用程序中 用户可以在 TextBox 中输入文本 并且 ListBox 内容会相应更改 例如 如果用户输入 TV 列表框将填充所有可用的电视品牌 并且用户可以从列表框和列表框条目中选择产品 接下来 如
  • 在运行 ActionEvent 之前 GUI 不会在视觉上更新

    为了详细说明一下 我有一个如下所示的 GUI 然后我在 确定 按钮上有一个动作侦听器 其开头如下 OK Button Action Listener private void okButtonActionPerformed ActionEv