JFrame标题重绘

时间:2009-03-19 22:06:39

标签: java swing jframe

在我的JFrame中循环执行某些任务,我想在JFrame标题中看到状态,所以我有这样的事情:

frame.setTitle(“当前状态[”+ Auto_Count_Id +“/”+ Auto_Count_Total +“]”);

但它并没有重新粉刷,因为我需要它。所以我尝试了以下内容:

<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) 

它们也不起作用,它只在任务完成后重新绘制,我该怎么办?

3 个答案:

答案 0 :(得分:3)

不要在Swing的事件线程中做繁重的工作。为计算创建一个新线程,以便Swing可以使用其线程重新绘制GUI。

答案 1 :(得分:0)

查看SwingWorker课程。

答案 2 :(得分:0)

是的,SwingWorker是要走的路。

如果您使用的是Java 6,它附带了一个包含publish()和process()方法的SwingWorker版本。这些方法在那里,您可以在执行长时间运行的任务时发布数据,然后您可以在事件调度线程中发布该数据。

您可以做的是创建一个SwingWorker子类,其中定义了长时间运行的任务。然后,在该长时间运行的任务中,使用publish()方法发布JFrame标题字符串。覆盖处理方法以设置JFrame的标题。

Here's the SwingWorker API doc for Java 6