如何在运行时在 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");
我正在做一个项目,我在单击按钮时执行三项任务,这大约需要一段时间。 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");