如何在运行时在 swing 应用程序中更改 jlabel text/color

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

我正在做一个项目,我在单击按钮时执行三项任务,这大约需要一段时间。 2-3 分钟我正在使用下面的代码

更改 jLabel 的文本
lblStatus.setText( "Phase1 done successfully !!!, Phase2 started " );

但是在所有 运行 完成后,我在 jLabel 中只得到 "All phase done successfully !!!" 文本。

您可以使用此更改颜色:

lblStatus.setForeground(Color.red);

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

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

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

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

我认为这是因为默认情况下您的任务将由 Event Dispatch Thread 执行,它负责管理所有 Swing 组件,因为它们不是线程安全的。此线程应仅执行 short tasks 否则您的应用程序将变得无响应。您应该将您的任务转换为 SwingWorker 的子 class,然后您将能够使用 PropertyChangeListener 以便在您的任务进展时修改您的状态文本。

有关 Concurrency in Swing 的更多详细信息。

要更改颜色部分文本使用 html

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