On this thread我已经想出如何将JXDatePicker添加到JXTable(或JTable)单元格中。但我现在有一个小问题。
DatePicker弹出并根据我的需要正常工作。但我无法更改单元格中日期的显示格式。它以下面的长格式显示。
Eg: Wed Aug 01 00:00:00 IST 2012
但我需要dd-MMM-yyyy
格式。
我尝试更改DatePickerCellEditor
的格式。它部分有效。这意味着,现在它在该单元格处于焦点时根据设置的格式显示日期。但是当我专注于其他一些细胞时,它又会回到上面的格式。
可能是DatePickerCellEditor
错误,可能是tableModel
可能有问题。但无法弄清楚。任何帮助表示赞赏..
谢谢!
答案 0 :(得分:1)
这是因为当您真正编辑单元格值时,仅使用TableCellEditor。为了表示值,在不使用编辑模式的情况下,使用TableCellRenderer。
我建议您阅读此article以了解有关tablecells的渲染器和编辑器概念的更多信息。
答案 1 :(得分:1)
根据你之前的问题,除了你想使用渲染器而不是编辑器之外,它的过程几乎相同
public class DateCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable jtable, Object value, boolean selected, boolean hasFocus, int row, int column) {
if (value instanceof Date) {
// You could use SimpleDateFormatter instead
value = DateFormat.getDateInstance().format(value);
}
return super.getTableCellRendererComponent(jtable, value, selected, hasFocus, row, column);
}
然后,要应用渲染,您可以将其应用于特定列(因此只有该列将使用它),或者在类似Date
的情况下,您可能希望将其用于所有列,使用Date
值......
JTable table = new JTable();
DateCellRenderer renderer = new DateCellRenderer();
// Apply for a single column
table.getColumnModel().getColumn(0).setCellRenderer(renderer);
// OR apply for all columns using the Date class
table.setDefaultRenderer(Date.class, renderer);