再次提出同样问题的借口。我的印象是,如果我加入原始问题,我就不会得到尽可能多的观点。
当我使用MVC模式时,我的Swing GUI与控制器创建一个实例在不同的类中。以下是我在视图中创建表的方法:
tableVehiclePermitHeader = new String[] {"Name", "Expiration Date"};
tableVehiclePermitData = new Object[0][0];
// Calendar tempDate = new GregorianCalendar(2008, 1, 1);
// Date tempDate1 = new Date(2008, 1, 1);
// tempDate1.setYear(tempDate1.getYear() - 1900);
// tableVehiclePermitData = new Object [][] {{"Hello", tempDate}, {"Hello", tempDate1}};
tableVehiclePermitDefaultTableModel = new DefaultTableModel(tableVehiclePermitData, tableVehiclePermitHeader);
tableVehiclePermit = new JTable(tableVehiclePermitDefaultTableModel){
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int rowIndex, int colIndex){
if (colIndex == 0){
return false;
} else {
return true;
}
}
};
tableVehiclePermit.getColumn("Expiration Date").setCellRenderer(new JDateChooserRenderer());
tableVehiclePermit.getColumn("Expiration Date").setCellEditor(new JDateChooserCellEditor());
注释行正确显示JDateChooser。只有当我从我的视图中填充表格内容时,我才能将日期渲染为JDateChoosers。
以下是我的渲染器:
public class JDateChooserRenderer extends JDateChooser implements TableCellRenderer{
Date inDate;
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
// TODO Auto-generated method stub
if (value instanceof Date){
this.setDate((Date) value);
} else if (value instanceof Calendar){
this.setCalendar((Calendar) value);
}
return this;
}
}
最后,我在我的Controller中获取数据,将数据库中的表填充为定义类型的ArrayList,其日期字段的类型为java.util.Date(也尝试了java.sql.Date到相同的结果) )。
ArrayList<VehiclePermitExpirationByVehicleDao> vehPermit = vpmodel.permitExpirationPerVehicle(id);
VehiclePermitExpirationByVehicleDao permitData;
permitListData = new Object[vehPermit.size()][3];
Iterator it = vehPermit.iterator();
int i = 0;
while (it.hasNext()){
permitData = (VehiclePermitExpirationByVehicleDao) it.next();
permitListData[i][0] = permitData.getVehiclePermitName();
permitListData[i][1] = permitData.getExpirationDate();
permitListData[i][2] = permitData.getVehiclePermitId();
i++;
}
gui.setTableVehiclePermitData(permitListData);
gui.getTableVehiclePermitDefaultTableModel().setDataVector(gui.getTableVehiclePermitData(), gui.getTableVehiclePermitHeader());
gui.getTableVehiclePermit().setModel(gui.getTableVehiclePermitDefaultTableModel());
gui.getTableVehiclePermit().setEnabled(true);
有人可以告诉我我做错了什么吗?我怀疑是持有日期的列的类型。
另外,如果有人知道怎么去编辑,请告诉我。
问候。
答案 0 :(得分:2)
您应该使用columnIndex获取Date列的 TableColumn ,然后在 TableColumn 上设置渲染器和编辑器。
TableColumn column1 = tableVehiclePermit.getColumnModel().getColumn(1);
column1.setCellRenderer(new JDateChooserRenderer());
column1.setCellEditor(new JDateChooserCellEditor());