2014-05-16 3 views
0

Привет, у меня есть плитка (JLabel) на панели макета сетки Я называю это tile.setBorder (BorderFactory.createEmptyBorder()); чтобы обновить границу плитки , тогда я вызываю длинный метод, но изображение обновляется после выполнения длинного метода. Я хочу, чтобы настройка границы была выполнена, и изображение полностью обновлено на экране до вызова метода, как это сделать?Java Ожидание корректировки границы в макете сетки

ответ

1

Попробуйте с SwingUtilities.invokeLater() убедиться, что EDT был инициализирован правильно.

Пожалуйста, взгляните ниже, чтобы узнать больше об этом.


Пример кода:

SwingUtilities.invokeLater(new Runnable() { 

    @Override 
    public void run() { 
     // any GUI related code will fall here 
     tile.setBorder(BorderFactory.createEmptyBorder()); 

     // do not add any lengthy method call here 
    } 
}); 

Для получения дополнительной информации прочитайте комментарии ниже.

+0

Если проблема все еще существует, пожалуйста, поделитесь своим примером кода, чтобы проанализировать его. – Braj

+1

На самом деле у вас это в обратном порядке. Проблема заключается в том, что «длинный метод» выполняется на EDT. Вы не хотите, чтобы код выполнялся на EDT, поскольку это предотвращает перерисовку GUI. – camickr

+0

@camickr Да, вы абсолютно правы. Еще раз спасибо. – Braj

0

но изображение обновляется после длинного метода.

Это связано с тем, что долговременная задача блокирует поток событий и не позволяет графическому интерфейсу перерисовываться, пока задача не будет завершена. Решение заключается в использовании отдельного потока для задачи.

Для получения дополнительной информации и примеров ознакомьтесь с разделом из учебника Swing по телефону Concurrency. Вы можете найти SwingWorker больше удобств, которые создают вашу собственную тему.

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