gpt4 book ai didi

java - 当 UI 线程执行其业务时,如何向用户提供按下按钮后的反馈

转载 作者:行者123 更新时间:2023-12-02 00:32:07 24 4
gpt4 key购买 nike

我有一个启动 JFileChooser 的 JButton。然而,JFileChooser 通常需要几秒钟的时间才能出现,在此期间用户可能认为什么也没有发生。我尝试使按钮变为禁用状态,直到 JFileChooser 完成为止,但在加载 JFileChooser 之前,按钮的禁用甚至不会发生。有什么我可以做的吗?我的代码:

public void actionPerformed(ActionEvent e) {
System.err.println("clicked");
((JButton) e.getSource()).setEnabled(false);
System.err.println("set");
JFileChooser b = new JFileChooser("C:\\");
b.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int res = b.showOpenDialog((Component) e.getSource());
if (res == JFileChooser.APPROVE_OPTION) {
try {
//Blah
}
catch (Exception err) {
JDialog j = new JDialog(window, "An error occured:\n" + err.getMessage());
}
}
((JButton) e.getSource()).setEnabled(true);
}

最佳答案

移动这些行..

JFileChooser b = new JFileChooser("C:\\");
b.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

..从 Action 执行方法到 Action 监听器的构造函数,将它们更改为..

b = new JFileChooser("C:\\");
b.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

..然后声明..

private JFileChooser b;

..作为类属性(因此它对执行的操作方法可见)。

您可能还想给它一个更好的名称。

<小时/>

选择器将在创建类时构造,并在需要时可供使用。这样做的另一个好处是,选择器将在用户随后激活按钮时记住位置、大小、路径和文件显示类型。

<小时/>

另一种策略是将选择器声明为类属性,不要在构造函数中实例化它,但如果它为null,则检查所执行的操作,如果是这样,请创建并配置它。

继续..

<小时/>

I might want to do something a bit slower like this at some point, that doesn't quite deserve its own thread.

根据我概述的最后一个策略,我正在考虑添加一些现在要添加的内容。

<小时/>

..继续

..当然,最后一个方法将给出与您描述的完全相同的问题,但仅在用户第一次单击按钮时出现一次。对于这种情况,您可能应该希望从 SwingWorker 内部弹出一个带有不确定 JProgressBarJOptionPane

显然,SwingWorker 创建一个新的 Thread,但是 OTOH,Java 中的 Thread 对象很便宜。任何应用程序都有许多正在运行的程序。带有图形用户界面。再多几个也没什么坏处。

关于java - 当 UI 线程执行其业务时,如何向用户提供按下按钮后的反馈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8775739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com