2009-03-19 4 views
0

В моей 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

Не делайте свою тяжелую работу в потоке событий Swing. Создайте новый поток для своих вычислений, чтобы Swing мог использовать его поток, чтобы перерисовать GUI.

0

Да, SwingWorker - это путь.

Если вы используете Java 6, он поставляется с версией SwingWorker, которая содержит методы publish() и process(). Эти методы существуют, поэтому вы можете публиковать данные по мере выполнения своей долгосрочной задачи, а затем вы можете публиковать эти данные в Thread Dispatch Thread.

Что вы можете сделать, это создать подкласс SwingWorker с заданием, выполняемым в течение длительного времени. Затем, внутри этой задачи с большим сроком, опубликуйте строку заголовка JFrame, используя метод publish(). Перезапишите метод процесса, чтобы установить заголовок вашего JFrame.

Here's the SwingWorker API doc for Java 6

Смежные вопросы