Сортировка синтаксиса и остановка таймера, связанного с JTable - PullRequest
0 голосов
/ 27 февраля 2019

Я основал этот код на ответе, полученном в другом потоке: Как сравнить запись в верхнем ряду JTable с соответствующим значением? , хотя многое изменилось.По сути, я обеспокоен тем, что мой синтаксис неверен, особенно в отношении последних двух строк кода, которые, я думаю, неуместны.Мне также не хватает одной строки кода, но я знаю, что могу использовать timer.stop (), если у меня правильный синтаксис.

Способ, которым я подошел к таймеру, состоит в том, чтобы два метода Timer были созданы после открытого классаопределено.Они переключаются между собой (Timer2 идентичен Timer1, за исключением линии переключения), когда запись в JTable добавляется, обновляется или удаляется, и, следовательно, порядок таблицы сортируется / изменяется.Я использовал логическую переменную «отмена», чтобы остановить таймер;эта переменная инициализируется после открытого класса и перед Timer1.В моей кнопке «Добавить», таким образом, запускается таймер:

cancel = true; // Stops any current timer
Timer1(); // Starts the timer

Я должен также упомянуть, что мне может потребоваться остановить таймер перед переключением на Timer2 или предупреждением пользователя, что у него больше нет записейЯ думаю, это большая проблема в моем коде.

Вот код:

public void Timer1() { // First timer class used to check if the alert is due
        DefaultTableModel model = (DefaultTableModel)Table.getModel(); // Initiates DefaultTableModel
        TimerTask task = new TimerTask(){ // Creates a new TimerTask

            public void run(){

                String date = model.getValueAt(0, 1).toString(); // Takes value from top row of second column as the date
                LocalDateTime alertTime = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm")); // Creates a variable representing the user's current system time

                if((alertTime.isEqual(LocalDateTime.now())) || (alertTime.isBefore(LocalDateTime.now()))){ // Once the user's time matches the time of the nearest alert...
                    JOptionPane.showMessageDialog(null, "Reminder: " +model.getValueAt(0, 0)); // Takes value from top row of first column and creates a pop-up notifying the user of the alert
                    model.removeRow(0); // Removes top row/entry
                    if(Table.getRowCount() == 0){ // If there are no more entries in the table...
                        JOptionPane.showMessageDialog(null, "No more entries."); // Creates a pop-up notifying the user there are no more entries
                    }    
                    else{
                        Timer2(); // Switches to the second timer
                    }
                }
                else if(cancel = true){ // An entry has been added, updated or deleted
                   // stop the timer
                   cancel = false;
                }
            }
        };

        Timer timer = new Timer(); // Creates a timer
        timer.schedule(task, 1000, 1 * 1000); // Executes the above task once every second
    }
...