【发布时间】:2018-01-14 20:55:49
【问题描述】:
我正在尝试为我的JTable 的列创建一个DefaultCellEditor,以便我可以设置计划的开始时间和结束时间。
但是,我无法弄清楚为什么当我在JTable 的单元格中使用JSpinner 输入时间时,我看到了正确的选择时间格式,但是当我按下回车键或取消选择当前单元格时,我得到一个完整的日期而不是时间。
这是我的DefaultCellEditor 和JSpinner。
public class ScheduleCellEditor extends DefaultCellEditor {
private final JSpinner timeSpinner;
public ScheduleCellEditor() {
super(new JTextField());
timeSpinner = new JSpinner();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 24);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date date = new Date();
SpinnerDateModel model = new SpinnerDateModel(date, null, null, Calendar.HOUR_OF_DAY);
model.setValue(calendar.getTime());
timeSpinner.setModel(model);
JSpinner.DateEditor editor = new JSpinner.DateEditor(timeSpinner, "HH:mm");
DateFormatter formatter = (DateFormatter) editor.getTextField().getFormatter();
formatter.setAllowsInvalid(false);
formatter.setOverwriteMode(true);
timeSpinner.setEditor(editor);
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
return timeSpinner;
}
@Override
public Object getCellEditorValue() {
return timeSpinner.getValue();
}
}
这是我将DefaultCellEditor设置为JTableTableColumns的方法
TableColumnModel columnModel = jtblSchedule.getColumnModel();
TableColumn startTimeCol = columnModel.getColumn(1);
TableColumn endTimeCol = columnModel.getColumn(2);
startTimeCol.setCellEditor(new ScheduleCellEditor());
endTimeCol.setCellEditor(new ScheduleCellEditor());
当我单击单元格并选择时间时,它会显示正确的格式,而我只看到 HH:mm
当我点击单元格外或点击其他地方时,即使编辑器和模型被格式化为时间,我也会得到完整的日期。
您对如何解决这个问题有什么建议吗?我只需要时间来显示,而不是完整的日期。
我将不胜感激。
谢谢。
【问题讨论】:
标签: java swing jtable tablecelleditor tablecolumn