Три шага:
- Поместите объекты даты и времени в ваши данные и / или табличную модель, а не строки.
- Используйте пользовательский рендерер для форматирования даты и времени в вашемячеек.
- Как уже сказал tomgeraghty3, скажите таблице автоматически генерировать сортировщик строк.
Поместите объекты даты-времени в ваши данные
Возможно Instant
объекты действительно лучше всего подходят для хранения ваших данных, но вы можете решить, что лучше сами. Чтобы этот пример был простым и только для этой цели, я использую LocalDateTime
объекты.
Object[] columnNames = { "Date and time" };
Object[][] data = {
{ LocalDateTime.of(2019, Month.OCTOBER, 30, 9, 27) },
{ LocalDateTime.of(2019, Month.SEPTEMBER, 26, 11, 25, 9) },
{ LocalDateTime.of(2019, Month.OCTOBER, 4, 15, 54, 25) },
{ LocalDateTime.of(2019, Month.OCTOBER, 13, 9, 2, 29) }
};
table = new JTable(data, columnNames);
Используйте пользовательский рендерер
table.setDefaultRenderer(Object.class, new MyDateTimeRenderer());
Насколько я понял, это должноМожно было указать LocalDateTime.class
для средства визуализации, которое будет использоваться только для LocalDateTime
объектов, но это не сработало для меня, я не знаю почему.
Мой класс MyDateTimeRenderer
выглядит такthis:
public class MyDateTimeRenderer implements TableCellRenderer {
private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.uuuu HH;mm;ss");
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
String formattedDateTime = ((LocalDateTime) value).format(formatter);
Component c = renderer.getTableCellRendererComponent(table,
formattedDateTime, isSelected, hasFocus, row, column);
return c;
}
}
Скажите таблице автоматически генерировать сортировщик строк
table.setAutoCreateRowSorter(true);
Вы можете поместить этот оператор до или после вызова setDefaultRenderer()
. Я считаю более естественным поставить его раньше.
Результат
Теперь перед сортировкой таблица выглядит так:
Нажмите на заголовок столбца «Дата и время» для сортировки. Результат:
Нажмите еще раз для сортировки в обратном порядке по убыванию:
Ссылка
Использование пользовательского рендерера с JTables