JButton文本不变

时间:2013-08-26 06:12:39

标签: java swing user-interface jpanel jbutton

所以我的代码基本上有一个带有一些文本字段和JPanel的{​​{1}},当用户点击按钮时,它转到按钮监听器,然后从文本字段中获取数据处理它,创建JButton,它将其添加到另一个不可见的JLabels。然后我让第一个JPanel不可见,并使第二个面板可见,揭示我生成的“结果”。

这一切都有效,但问题是,当我的程序处理从文本字段中获取的数据时,我希望JPanel更改它所说的内容,并且我已经尝试使用JButton,并且我能够发现它正在更改按钮文本(通过打印到控制台),但它没有更新带有更改文本的按钮。

在此之后我尝试了所有形式的重新验证并重新绘制和验证,但没有一个工作。有任何想法吗?谢谢!

event.getSource().setText()

1 个答案:

答案 0 :(得分:4)

原因是在作业完成之前没有处理任何绘画事件,因此{I} setText的效果将在您认为不会显示。

repaint()只承诺“尽快”重新绘制(按照文档),但由于绘制事件在与按钮点击事件(“事件调度线程”)相同的线程上处理,因此您的处理有效导致setText调用和面板隐藏/显示同时发生(可以这么说),作业完成后发生。

如果您的工作需要相当长的时间,那么使用数据处理作业阻止EDT的效果是显而易见的 - 由于EDT没有任何机会重新绘制,处理调整大小/鼠标点击事件,UI将变得完全没有响应等。

重处理应该在后台线程中进行,最好是SwingWorker的帮助。这使得EDT可以自由处理油漆(和其他)事件。