gpt4 book ai didi

java - 带有 JSpinner 的 CellEditor 时间格式恢复为日期格式

转载 作者:行者123 更新时间:2023-11-30 02:26:29 25 4
gpt4 key购买 nike

我正在尝试为我的 JTable 列创建一个 DefaultCellEditor ,以便我可以设置计划的开始时间和结束时间。但是,我不明白为什么当我在 JTable 的单元格中使用 JSpinner 输入时间时,我看到了选择时间的正确格式,但是当我按 Enter 键或取消选择当前单元格,我得到了整个日期,而不仅仅是时间

这是我的 DefaultCellEditorJSpinner

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 设置为 JTable TableColumns

    TableColumnModel columnModel = jtblSchedule.getColumnModel();
TableColumn startTimeCol = columnModel.getColumn(1);
TableColumn endTimeCol = columnModel.getColumn(2);
startTimeCol.setCellEditor(new ScheduleCellEditor());
endTimeCol.setCellEditor(new ScheduleCellEditor());

当我单击单元格并选择时间时,它会显示正确的格式,我只能看到 HH:mm

enter image description here

当我单击单元格外或单击其他位置时,即使编辑器和模型已格式化为时间,我也会获得完整日期。

enter image description here

您对如何解决这个问题有什么建议吗?我只需要显示时间而不是完整日期。

我将不胜感激任何帮助。

谢谢。

最佳答案

您的 TableCellEditor 似乎正常,但您仍然得到默认的 renderer对于时间值(value)。您需要一个 custom renderer具有合适的SimpleDateFormat 。改编自此example ,也许是这样的:

private static final DateFormat TIME_FORMAT = DateFormat.getTimeInstance();

private class TimeRenderer extends DefaultTableCellRenderer {

@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean selected, boolean focused, int row, int column) {
super.getTableCellRendererComponent(table, value, selected, focused, row, column);
setText(TIME_FORMAT.format((Date) value));
return this;
}
}

TimeRenderer timeRenderer = new TimeRenderer();
startTimeCol.setCellRenderer(timeRenderer);
endTimeCol.setCellRenderer(timeRenderer);

关于java - 带有 JSpinner 的 CellEditor 时间格式恢复为日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45548812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com