Как сравнить запись в верхнем ряду JTable с соответствующим значением?
Я пытаюсь создать приложение, в котором пользователь вводит время и дату в JTable
а затем получает предупреждение в это время. Я планировал это так, чтобы записи отображались в хронологическом порядке с ближайшими в верхней строке, а затем каждые 5 минут сравнивались с датой / временем пользователя до совпадения.
Я чувствую, что могу понять все в этом плане, кроме фактического сканирования только верхней строки и 2 столбцов из 3 (столбцы ДАТА и ВРЕМЯ, но не ИМЯ). Если у кого-нибудь есть какие-либо рекомендации о том, как заставить это работать, или если я должен изменить то, как я подхожу к этой проблеме, я был бы очень признателен, спасибо.
1 ответ
Я надеюсь, что приведенный ниже пример ответит на ваш вопрос.
(Здесь я предполагаю, что таблица отсортирована по дате и времени, а самое раннее предупреждение находится вверху таблицы.)
import javax.swing.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.TimerTask;
import java.util.Timer;
public class DateTimeTable
{
public static void main(String[] args)
{
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTable table = new JTable(
new String[][] {
{"Water plants", "2019.01.12", "09:21"},
{"Read Java book", "2019.01.12", "19:30"},
{"Go to bed", "2019.01.12", "22:30"}},
new String[] {"Name", "Date", "Time"});
TimerTask task = new TimerTask()
{
@Override
public void run()
{
String date = table.getValueAt(0, 1).toString();
String time = table.getValueAt(0, 2).toString();
LocalDateTime alertTime = LocalDateTime.parse(date + " " + time,
DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm"));
if (alertTime.isBefore(LocalDateTime.now()))
{
JOptionPane.showMessageDialog(f, table.getValueAt(0, 0));
}
else
{
System.out.println("No alerts");
}
}
};
Timer timer = new Timer();
timer.schedule(task, 1000, 5 * 60 * 1000);
f.getContentPane().add(new JScrollPane(table));
f.setBounds(300, 200, 400, 300);
f.setVisible(true);
}
}