флажок Java установлен? затем цикл

1

у меня есть флажок, и я хочу

  1. Если установлен флажок: make loop каждые 10 минут
  2. И снимите флажок: выйдите из цикла

Ниже приведено событие: -

final JCheckBox rfh = new JCheckBox("Auto Refresh");
toolbar.add(rfh);
toolbar.setAlignmentX(0);
rfh.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        try {
            while ( rfh.isSelected() ) {
                if (rfh.isSelected()) {
                   // ((JCheckBox)evt.getSource()).isSelected()
                   JOptionPane.showMessageDialog(toolbar,"thank you for using java");
                   Thread.sleep(5 * 1000);
                } else {
                    JOptionPane.showMessageDialog(toolbar,"not selected");
                }
            }
        } catch (Exception e) {
        }
    }
 });
  • 0
    Вы можете сказать нам, что вы подразумеваете под «сделать цикл». Также проверьте 'javax.swing.Timer'
  • 0
    @ maneesh я изменил вопрос
Теги:
swing
checkbox

1 ответ

2

Начнем с рассмотрения:

В принципе, Swing - это однопоточная среда, поэтому не пытайтесь использовать цикл и Thread.sleep в методе ActionPerformed.

Два простых решения будут либо...

Используйте Timer Swing

Timer Swing позволит вам настроить регулярный запланированный вызов. Этот обратный вызов будет выполнен в контексте потока Dispatching Event, что отлично подходит для обновления пользовательского интерфейса.

Его можно легко запустить и остановить.

Обратный вывод - это уведомление в контексте EDT, что делает его плохим выбором для совершения вызовов в базу данных, что может заставить программу "заикаться" каждый раз, когда она вызывается...

или используйте SwingWorker

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

В принципе, вам нужно настроить какой-то цикл (в рамках рабочего метода doInBackground) и использовать Thread.sleep для ожидания Thread.sleep периода времени. Как только Thread.sleep вернется, вы сделаете свой звонок в базу данных, построили свою модель данных и передали ее методу publish.

В рамках метода process, который вызывается в контексте EDT, вы обрабатываете эти результаты и обновляете свою модель таблицы соответственно...

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

  • 0
    благодарю вас. Можете ли вы привести пример на Swing Timer?
  • 0
    Проверьте ссылки, там есть примеры. Ищите ТАК для [java] [swing] timer ... Я сам выложил несколько сотен примеров

Ещё вопросы

Сообщество Overcoder
Наверх
Меню