JLabel не меняет цвет спины - PullRequest
       22

JLabel не меняет цвет спины

4 голосов
/ 25 января 2011

Часть моей функции выглядит следующим образом

jLabel2.setBackground(Color.YELLOW);
jLabel2.setText("Status : Idle");

boolean ok=cpu21.RestartSSH();

if(ok){
    jLabel2.setBackground(Color.GREEN);
    jLabel2.setText("Status : Run");    
}

Перед вводом в функцию метка имеет значение Green и Run, но когда я вхожу в функцию, она не меняет цвет на желтый (функция RestartSSH выполняется 5-6 секунд, но в течение этого времени метки не меняют цвета и не фиксируют ). Где я ошибаюсь в живописи?

Ответы [ 3 ]

13 голосов
/ 25 января 2011
  • Сделайте ваш JLabel непрозрачным, чтобы вы могли установить его цвет фона.
  • Выполните RestartSSH в отдельном потоке, иначе ваш графический интерфейс не будет реагировать на события.1007 * Пример:
    final JLabel jLabel2 = new JLabel("HELLO");
    jLabel2.setOpaque(true);
    jLabel2.setBackground(Color.YELLOW);
    jLabel2.setText("Status : Idle");
    
    //perform SSH in a separate thread
    Thread sshThread = new Thread(){
        public void run(){
            boolean ok=cpu21.RestartSSH();
            if(ok){
               //update the GUI in the event dispatch thread
               SwingUtilities.invokeLater(new Runnable() {
                   public void run() {
                       jLabel2.setBackground(Color.GREEN);
                       jLabel2.setText("Status : Run");
                   }
               });
            }
        }
    };
    sshThread.start();
    

    (Обновление: добавлен вызов SwingUtilities.invokeLater)

5 голосов
/ 25 января 2011

JLabels по умолчанию непрозрачен, поэтому их фон не закрашен по умолчанию.Попробуйте:

jLabel2.setOpaque(true);

или, возможно, вам придется позвонить перекрасить после изменения цвета:

jLabel2.repaint();
2 голосов
/ 25 января 2011

Я подозреваю, что ваш метод restartSSH() блокирует поток отправки события . Один из подходов заключается в использовании SwingWorker, как предложено в этом примере . Это позволит вам показать ход процесса перезапуска и правильно установить метку, когда это будет сделано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...