繁体   English   中英

如何在Swing应用程序中的运行时更改jlabel文本/颜色

[英]how to change jlabel text/color at runtime in swing aplicaiton

我正在做一个项目,在这个项目上,我要做一个单击按钮的操作,这需要三个步骤。 2-3分钟,我使用以下代码更改jLabel的文本

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

但我只有“所有阶段都成功完成!!!” 完成所有运行后,jLabel中的文本。

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

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

有关更多信息,请参见SwingUtilities.invokeLater()为什么需要它?

我相信这是因为默认情况下,您的任务将由Event Dispatch Thread执行,该Event Dispatch Thread负责管理所有Swing组件,因为它们不是线程安全的。 该线程仅应执行简短的任务,否则您的应用程序将无响应。 您应该将任务转换为SwingWorker的子类,然后每当任务进度变化时,就可以使用PropertyChangeListener来修改状态文本。

有关Swing并发的更多详细信息。

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

lblStatus.setForeground(Color.red);

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

更改颜色部分文字使用html

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM