Java JTable date列排序冻结
我正在使用一个JTable,它包含几个具有不同数据类型(int、string、date)的列。当我运行应用程序时,数据显示良好,但如果我使用列标题对数据进行排序,它将冻结在包含日期对象的列上。下面是代码。第8、9和10列是导致问题的列。如何使日期列可排序Java JTable date列排序冻结,java,swing,jtable,defaulttablemodel,Java,Swing,Jtable,Defaulttablemodel,我正在使用一个JTable,它包含几个具有不同数据类型(int、string、date)的列。当我运行应用程序时,数据显示良好,但如果我使用列标题对数据进行排序,它将冻结在包含日期对象的列上。下面是代码。第8、9和10列是导致问题的列。如何使日期列可排序 public void updateLogTable() { DefaultTableModel model = (DefaultTableModel) logTable.getModel(); List<LogObje
public void updateLogTable() {
DefaultTableModel model = (DefaultTableModel) logTable.getModel();
List<LogObject> lstLogObjects = new ArrayList<LogObject>();
lstLogObjects = LogManager.getLog();
for (int i = 0; i < lstLogObjects.size(); i++) {
Object[] temp = new Object[13];
temp[0] = Integer.parseInt(lstLogObjects .get(i).getLogID());
temp[1] = lstLogObjects .get(i).getLogType();
temp[2] = lstLogObjects .get(i).getYear();
temp[3] = lstLogObjects .get(i).getQuarter();
temp[4] = lstLogObjects .get(i).getOriginalID();
temp[5] = lstLogObjects .get(i).getSubject();
temp[6] = lstLogObjects .get(i).getAction();
temp[7] = lstLogObjects .get(i).getRequester();
temp[8] = lstLogObjects .get(i).getADate(); //Returns java.util.Date
temp[9] = lstLogObjects .get(i).getCDate(); //Returns java.util.Date
temp[10] = lstLogObjects .get(i).getSDate(); //Returns java.util.Date
temp[11] = lstLogObjects .get(i).getRemarks();
temp[12] = lstLogObjects .get(i).getField1();
model.addRow(temp);
}
model.fireTableDataChanged();
}
public void updateLogTable(){
DefaultTableModel=(DefaultTableModel)logTable.getModel();
List lstLogObjects=new ArrayList();
lstLogObjects=LogManager.getLog();
对于(int i=0;i
是否重写了TableModel的getColumnClass(…)方法以返回正确的类
然后,表排序方法将对列进行排序并将其视为日期,而不是调用Date对象上的toString()
如果您需要更多帮助,请发布演示问题的帖子。我建议您使用JXTable来解决任何比显示两列更简单的问题。例如,基本介绍 另一个选项是在表中使用Long-as元素,并使用列呈现器,它将格式化日期:
temp[8] = lstLogObjects .get(i).getADate().getTime()
table.getColumnModel().getColumn(8).setCellRenderer( new DefaultTableCellRenderer(){
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column){
Object value2 = value;
if(row>0 && column==8) //put your own condition here
value2 = new Date((Long)value).toString(); //your own formatting here
return super.getTableCellRendererComponent(table, value2,
isSelected, hasFocus,
row, column);
}
});
}
getADate()
返回什么类型?对不起。我用注释更新了代码。它返回java.util。Date@Woodszy返回System.out.println(lstLogObjects.get(i.getADate())的内容;类似于Fri Jan 10 00:00:00 GTM 2010的功能在每次渲染单元格时都无法将长变量持续转换为日期。谢谢。我使用Netbeans生成的代码来定义JTable,因此定制表有点困难。但你的建议奏效了。