如何在swing aplicaiton中改变运行时的jlabel文本/颜色

时间:2016-10-07 11:04:31

标签: java swing runtime jlabel event-dispatch-thread

我正在进行项目,我在按钮点击上执行三项任务,需要aprox。 2-3分钟我正在使用以下代码更改jLabel的文本

lblStatus.setText( "Phase1 done successfully !!!, Phase2 started " );

但我只得到#34;所有阶段都成功完成!!!"所有运行完成后,jLabel中的文本。

4 个答案:

答案 0 :(得分:2)

如果您在EDT中运行长时间运行的任务,则UI会冻结,直到您的任务完成。因此,您应该在后台线程中执行长时间运行的任务。在后台线程中,您可以使用SwingUtilties.invokeLater()来更新UI。 示例:

SwingUtilities.invokeLater(new Runnable() {
  @Override
  public void run() {
    lblStatus.setText( "Phase1 done successfully !!!, Phase2 started " );
}});

有关详细信息,请参阅SwingUtilities.invokeLater() why is it needed?

答案 1 :(得分:2)

我认为这是因为Event Dispatch Thread默认执行您的任务,PropertyChangeListener负责管理所有Swing组件,因为它们不是线程安全的。此线程应该只执行短任务,否则您的应用程序将无法响应。您应该将您的任务转换为SwingWorker的子类,然后您就可以使用<ng-map zoom="4" center="39.02, -95.81"> <map-data on-click="vm.onClick()" load-geo-json="us-states-20m.json"> </map-data> </ng-map> ,以便在任务进度发展时修改您的状态文本。

有关Concurrency in Swing的更多详情。

答案 2 :(得分:0)

您可以使用以下方式更改颜色:

lblStatus.setForeground(Color.red);

并且对于更改文本,您可以使用setText()方法,如果您在使用时遇到问题,请在此处发送所有代码

答案 3 :(得分:0)

更改颜色部分文字使用html

lblStatus.setText("<html><b><font color='red'>Phase1 done successfully !!!</font></b>, Phase2 started");