我正在使用 JTable。我有一个日期列,当我单击一个单元格时,我需要在其中显示一个 JXDatePicker,以便我可以从中选择一个日期。
有人可以告诉我如何做到这一点吗?
谢谢!等待答案..
我正在使用 JTable。我有一个日期列,当我单击一个单元格时,我需要在其中显示一个 JXDatePicker,以便我可以从中选择一个日期。
有人可以告诉我如何做到这一点吗?
谢谢!等待答案..
您可能应该使用DatePickerCellEditor
,这是一个CellEditor
使用JXDatePicker
as 编辑器组件。例如:
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();
}
});
}
}
正如我在对 Max 正确答案的评论中已经提到的:
默认情况下, JXTable(与普通 JTable 相同)会格式化日期值,使用DateFormat.getInstance()
. 如果格式似乎不起作用,这通常是 tableModel 的不完整实现:仅当 columnClass 返回该特定类型时才使用特定类型的默认渲染器
// in your TableModel, implement getColumnClass
@Override
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex == myDateColumnIndex) {
return Date.class;
}
...
}
要安装具有自定义格式的日期渲染器,请根据需要使用 FormatStringValue 实例化 DefaultTableRenderer 并告诉表使用它(每列,适用于任何 columnClass 或每表,适用于返回 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);
您可以为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”。
该库可以从项目Release Page安装到您的 Java 项目中。
项目主页位于 Github 上:
https ://github.com/LGoodDatePicker/LGoodDatePicker 。