JavaJFrame标题重绘
在我的JFrame中,它循环执行一些任务,我希望看到JFrame标题中的状态,因此我有如下内容:
框架。setTitle(“当前状态[“+自动计数\u Id+”/“+自动计数\u总计+”]”)
但这不是我需要的重新粉刷。因此,我尝试了以下方法:
<1>
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
frame.setTitle("Current status [ "+Auto_Count_Id+"/"+Auto_Count_Total+" ]");
}
});
及
<2>
// repaint(long time, int x, int y, int width, int height)
frame.repaint(10,0,0,500,300)
它们也不工作,只在任务完成后重新绘制,我能做什么
# 1 楼答案
看看SwingWorker类
# 2 楼答案
不要在Swing的活动线程中做繁重的工作。为您的计算创建一个新线程,以便Swing可以使用其线程重新绘制GUI
# 3 楼答案
是的,SwingWorker是个不错的选择
如果您使用的是Java 6,那么它附带了一个包含publish()和process()方法的SwingWorker版本。这些方法用于在执行长时间运行的任务时发布数据,然后在事件调度线程中发布该数据
您可以使用中定义的长时间运行任务创建SwingWorker子类。然后,在长时间运行的任务中,使用publish()方法发布JFrame标题字符串。覆盖process方法以设置JFrame的标题
Here's the SwingWorker API doc for Java 6