Неспособный выбрать цвет фона флажка во времени выполнения

Есть класс AgentHome, который расширяет JFrame. У AgentHome есть JPanel rem_panel. Флажки добавляются динамично в rem_panel … количество флажков в зависимости от количества записей в таблице базы данных от того, где текст, который будет показан textboxes, прочитан.

У AgentHome есть целочисленная переменная x и флажок arraylist rem_cbarr.

rem_cbarr хранит флажки, поскольку они создаются и добавляются к rem_panel. Я пытаюсь выбрать цвет фона этих флажков к красному, когда переменная x установлена в 1, поскольку программа выполняет. Я осуществил TickerBehaviour НЕФРИТОВОЙ структуры, чтобы проверить, установлена ли переменная x в 1.

Я неспособен выбрать цвет фона флажков к красному. Это - код, который я осуществил. Пожалуйста, помогите. Спасибо.

 public void setup()
{
  Behaviour loop = new TickerBehaviour( this, 2000 )
  {
     protected void onTick() {

      timer();
     }
  };


   addBehaviour( loop );
 }

  public void timer()
{
    AgentHome hm=new AgentHome();
           if(hm.x==1)
       {
           for (int i = hm.rem_cbarr.size()-1; i>=0; i--)
                   {
                       JCheckBox cb=hm.rem_cbarr.get(i);
                     cb.setBackground(Color.red);
                      hm.rem_panel.revalidate();
                     hm.rem_panel.repaint();
                   }
      }
}
0
nl ja de
1) Для лучшей помощи раньше, отправьте SSCCE. 2) Использование последовательная и логическая заявка на кодовые блоки. Углубление кода предназначается, чтобы помочь людям понять процесс выполнения программы. 3) 1 линия пробела всегда достаточно, don' t включают 7!
добавлено автор Andrew Thompson, источник

2 ответы

Много вещей...

  • UI components should only ever be updated within the context of the Event Dispatching Thread
  • You should never perform any action which might block the Event Dispatching Thread (like using loops or Thread#Sleep to try and update the screen)
  • The Event Dispatching Thread is responsible for dispatching paint updates...
  • JCheckBox is transparent by default.

public class FlashCheckBox {

    public static void main(String[] args) {
        new FlashCheckBox();
    }

    public FlashCheckBox() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new GridBagLayout());
                frame.add(new FlashyCheckBox());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class FlashyCheckBox extends JCheckBox {

        private final Color defaultBackground;
        private int flash;
        private Timer flashTimer;

        public FlashyCheckBox() {

            defaultBackground = getBackground();

            flashTimer = new Timer(500, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    flash++;
                    if (flash % 5 == 0) {
                        setOpaque(false);
                        setBackground(defaultBackground);
                        flashTimer.stop();
                    } else if (flash % 2 == 0) {
                        setBackground(Color.YELLOW);
                        setOpaque(true);
                    } else {
                        setBackground(defaultBackground);
                        setOpaque(false);
                    }
                    repaint();
                }
            });

            flashTimer.setRepeats(true);
            flashTimer.setCoalesce(true);
            flashTimer.setInitialDelay(0);

            addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    flashTimer.restart();
                }
            });

        }

    }

}
1
добавлено

Операции GUI должны быть сделаны на EDT (Нить Диспетчера Событий). На Яве это происходит, звоня SwingUtilities.invokeLater (Работоспособный пробег).

1
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async