在 JButton 操作上多次替换 JLabel 文本
Posted
技术标签:
【中文标题】在 JButton 操作上多次替换 JLabel 文本【英文标题】:Replace JLabel text multiple times on JButton action 【发布时间】:2021-08-06 17:51:05 【问题描述】:点击JButton
时,我需要使用setText
清空JLabel
。在actionPerformed
内部,我还有另一个Java 类调用。
如果它返回异常,那么我必须将标签更改为setText("Error occurred")
。
如果它返回结果,我必须将相同的标签更改为setText("Process completed")
。
我试图生成一个异常并且它工作正常,但是当我再次单击该按钮时,文本不会被空字符串替换。相反,它仍然显示“发生错误”。
请查看下面的代码,让我知道我需要更改什么。
btnConvert.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
label1.setText("");
if(lblSource.getText().isEmpty())
label2.setText("You have missed to select!! Please select it");
else
label1.setText("processing... ");
VelConverter v = new VelConverter(locations);
String response = v.convert();
if(response.startsWith("Exception"))
//code
label1.setText("Error Occurred");
else
//code
label1.setText("Completed");
【问题讨论】:
1) 为了尽快获得更好的帮助,edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。 2) 问题听起来像是代码阻塞了 EDT。不要阻塞 EDT(事件调度线程)。发生这种情况时,GUI 将“冻结”。有关详细信息和修复,请参阅 Concurrency in Swing。 空值和“处理中...”消息将永远不会显示,因为 GUI 只能在处理未决事件之后更新。根据您的代码,处理后只有“已完成”和“发生错误”是可能的标签值。请记住,Swing 是单线程的,如果您在 ActionListener 中进行长时间处理,您应该考虑使用 SwingWorker 来完成繁重的工作。 Andrew Thompson 编辑了代码。我还将检查 Swing 中的并发性 “编辑了代码。” 你为什么告诉我?更重要的是,我们什么时候可以看到 MRE / SSCCE? 提示:添加@Rocco(或任何重要的@
)以通知此人有新评论。很高兴你解决了。 :)
【参考方案1】:
感谢 Rocco 和 Andrew Thomson。您关于并发的建议使我研究了 Swing worker。我刚刚使用 Swing worker 分离了线程,我能够达到我的要求。
这个链接让我明白了 Swing 的工作原理很简单。 https://www.geeksforgeeks.org/swingworker-in-java/
【讨论】:
以上是关于在 JButton 操作上多次替换 JLabel 文本的主要内容,如果未能解决你的问题,请参考以下文章
JButton、JTextFeild、JLabel 设置背景颜色不起作用
如何让 Swing 将我自己的 HTMLEditorKit 用于 JLabel/JButton/等
绘制一个 JButton 看起来像一个 JLabel(或者至少没有按钮边缘?)