Я сделал редактор таблиц и хотел создать фильтр, в который я вводил бы дату «от» и дату «до». Должны отображаться все строки, содержащие дату между этими двумя датами, остальные отфильтрованы. Моя первая проблема заключалась в том, как поместить объект даты в таблицу, не похожий на стандартный объект даты, поэтому я сделал это:
TableCellRenderer tableCellRenderer = new DefaultTableCellRenderer() {
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yy");
public Component getTableCellRendererComponent(JTable table, Object
newDatum, boolean isSelected,boolean hasFocus, int row, int column) {
if (newDatum instanceof Date) {
newDatum = format.format(newDatum);
}
return super.getTableCellRendererComponent(table, newDatum, isSelected,
hasFocus, row, column);
}
};
table.getColumnModel().getColumn(0).setCellRenderer(tableCellRenderer);
Но я не думаю, что объект даты остается объектом даты таким образом, но я не уверен. Следующая проблема заключается в том, что, хотя приведенный выше код на самом деле форматирует объект даты в формате «dd.MM.yy», чего я и хотел, когда я нажимаю на ячейку, он немедленно возвращается к стандартному формату даты.
Кроме того, метод фильтра, который я сделал, я не уверен, работает ли он так:
public void filterDates(Date von, Date bis) {
List<RowFilter<Object, Object>> filters = new ArrayList<RowFilter<Object, Object>>(2);
filters.add(RowFilter.dateFilter(ComparisonType.AFTER, von));
filters.add(RowFilter.dateFilter(ComparisonType.BEFORE, bis));
TableRowSorter<DefaultTableModel> tr2 = new TableRowSorter<DefaultTableModel>(
(DefaultTableModel) table.getModel());
table.setRowSorter(tr2);
tr2.setRowFilter(RowFilter.orFilter(filters));
}
Я не знаю, будет ли он делать то, что я хочу, отфильтровать даты между двумя указанными датами.
Теперь я не знаю, использую ли я метод getTableCellRendererComponent, который использует tablecellrender, если он сохраняет объект даты, если он делает, все хорошо. Но мне также нужен способ сохранить их в желаемом формате, даже если я нажму на редактировать ячейку.
У меня есть tablechangeListener, но я не знаю, что мне делать.
Прямо сейчас, если я позволю объектам даты оставаться в нужном желаемом формате и использую фильтр, все строки исчезнут, если я их отредактирую, так что они будут выглядеть как исходный формат даты, и при попытке фильтрации они тоже исчезнут. Даже если даты находятся между двумя введенными мною датами.
Что должно случиться, так это то, что объекты даты остаются в формате "dd.MM.yy", даже если я нажимаю на правку, и я хочу иметь возможность фильтровать их между двумя датами.