Я использую JTable. Там у меня есть столбец Date, где мне нужно, чтобы JXDatePicker появлялся, когда я нажимаю на ячейку, чтобы я мог выбрать из нее дату.
Может ли кто-нибудь показать мне, как это сделать?
Спасибо! в ожидании ответа..
Я использую JTable. Там у меня есть столбец Date, где мне нужно, чтобы JXDatePicker появлялся, когда я нажимаю на ячейку, чтобы я мог выбрать из нее дату.
Может ли кто-нибудь показать мне, как это сделать?
Спасибо! в ожидании ответа..
Вероятно, вам следует использовать DatePickerCellEditor
, который представляет собой CellEditor
с использованием JXDatePicker
в качестве компонента редактора. Например:
TableColumn dateColumn = table.getColumnModel().getColumn(columnIndex);
dateColumn.setCellEditor(new DatePickerCellEditor());
Вот демонстрационная таблица:
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.TableColumn;
import org.jdesktop.swingx.table.DatePickerCellEditor;
public class DateColumnDemo {
private static void createAndShowGUI() {
JFrame frame = new JFrame("DateColumnDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTable table = new JTable(new Object[][] { { "1", new Date() } },
new Object[] { "Id", "Time" });
TableColumn dateColumn = table.getColumnModel().getColumn(1);
dateColumn.setCellEditor(new DatePickerCellEditor());
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane);
frame.pack();
frame.setVisible(true);
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
Date
так, как вы этого хотите. Ознакомьтесь с разделом Использование пользовательских средств визуализации docs.oracle.com/javase. /tutorial/uiswing/components/. Вы используете тот же базовый подход к editors
, чтобы применить renderers
(вместо этого просто используйте методы renderer
)
- person MadProgrammer; 06.08.2012
Как уже упоминалось в моем комментарии к правильному ответу Макса:
JXTable (такой же, как обычный JTable) делает форматирование значения даты по умолчанию, используя формат, возвращенный DateFormat.getInstance()
. Если форматирование не работает, обычно это неполная реализация tableModel: средство визуализации по умолчанию для определенного типа используется только тогда, когда columnClass возвращает этот конкретный тип.
// in your TableModel, implement getColumnClass
@Override
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex == myDateColumnIndex) {
return Date.class;
}
...
}
Чтобы установить средство визуализации даты с настраиваемым форматом, создайте экземпляр DefaultTableRenderer с соответствующим значением FormatStringValue и сообщите таблице, чтобы использовать его (либо для каждого столбца, работает с любым классом столбцов или для каждой таблицы, работает для столбцов, возвращающих класс Date)
StringValue sv = new FormatStringValue(new SimpleDateForma("dd-MMMM-yyyy"));
TableCellRenderer r = new DefaultTableRenderer(sv);
// either per-column
table.getColumn(dateColumnIndex).setCellRenderer(r);
// or per-table
table.setDefaultRenderer(Date.class, r);
public Class<?> getColumnClass(int columnIndex){...}
метод. Ваш ответ стал очень полезным..
- person Sumudu; 07.08.2012
Вы можете предоставить редактор ячеек таблицы по умолчанию для класса Date
(при условии, что столбец использует Date
)
Ознакомьтесь с setDefaultEditor, чтобы узнать подробности.
Это, как правило, немного тяжело, поэтому вы можете использовать JTable.getColumnModel().getColumn(int).setCellEditor(editor), чтобы указать редактор, который будет использоваться для данного TableColumn
Ознакомьтесь с разделом Как использовать таблицы (используя другие редакторы) для подробнее
Вы можете добавить DatePicker в JTable (или в JXTable), добавив в свою таблицу «Редактор таблиц». Редактор таблиц — это любой класс, реализующий интерфейс «javax.swing.table.TableCellEditor». Вы можете сделать это с помощью компонента JXDatePicker, как описано выше, или с помощью файла LGoodDatePicker, как показано здесь. (Это альтернативное решение той же проблемы.)
Справедливое раскрытие информации: я являюсь основным разработчиком LGoodDatePicker.
Библиотека LGoodDatePicker включает три класса TableEditor. Эти классы позволяют программисту добавлять DatePicker, TimePicker или DateTimePicker в ячейки Swing JTable (или в SwingX JXTable).
Классы сборщиков также можно добавлять к обычным поворотным панелям или другим поворотным контейнерам.
Вот пример того, как добавить DateTimePicker в ваш JTable:
// Create a table.
JTable table = new JTable(new DemoTableModel());
// Add the DateTimeTableEditor as the default editor and renderer for
// the LocalDateTime data type.
table.setDefaultEditor(LocalDateTime.class, new DateTimeTableEditor());
table.setDefaultRenderer(LocalDateTime.class, new DateTimeTableEditor());
// Explicitly set the default editor and renderer for column index 0.
TableColumn column = table.getColumnModel().getColumn(0);
column.setCellEditor(table.getDefaultEditor(LocalDateTime.class));
column.setCellRenderer(table.getDefaultRenderer(LocalDateTime.class));
Вот руководство по Oracle о том, как использовать табличные редакторы.
Я вставил скриншоты ниже с демонстрацией редактора таблиц, компонентов средства выбора и полной демонстрации. Обратите внимание, что библиотека LGoodDatePicker включает отдельную демонстрацию для редакторов таблиц. Он находится в репозитории в этой папке: "LGoodDatePicker/Project/src/main/java/com/github /lgooddatepicker/demo/TableEditorsDemo.java".
Библиотеку можно установить в ваш Java-проект с страницы выпуска проекта.
Домашняя страница проекта находится на Github по адресу:
https://github.com/LGoodDatePicker/LGoodDatePicker .