使用日期类型更新 JTable 单元格

Posted

技术标签:

【中文标题】使用日期类型更新 JTable 单元格【英文标题】:Updating JTable Cell with Date type 【发布时间】:2013-12-09 17:04:13 【问题描述】:

我已经关注了一些***对这个问题的回应,我发现的每个答案都有助于解决这个问题,但是我仍然卡住了。

我仍然无法使用日期类型更新表格单元格,我单击单元格并对其进行编辑,但是当我按 Enter 时它不会更新,它甚至不会让我离开单元格它只会显示一个它周围的红色边框。我将不胜感激,谢谢。

getColumnClass 方法:

@Override
public Class getColumnClass(int column) throws IllegalStateException 
    String columnName;

    if (!connectedToDatabase) 
        throw new IllegalStateException("Not Connected to Database");
    

    columnName = getColumnName(column);

    if(columnName.equals("id")) 
        return java.lang.Integer.class;
    

    switch (table) 
        case 0:
            if (columnName.equals("dn") || columnName.equals("ade")) 
                return java.util.Date.class;                    
             else 
               return java.lang.String.class;
            
        default:
            try 
                String className = metaData.getColumnClassName(column + 1);
                return Class.forName(className);
             catch (SQLException | ClassNotFoundException ex) 
                return Object.class;
            
    

getValueAt 方法:

@Override
public Object getValueAt(int row, int column) throws IllegalStateException 
    if (!connectedToDatabase) 
        throw new IllegalStateException("Not Connected to Database");
    

    try 
        resultSet.absolute(row + 1);
        return resultSet.getObject(column + 1);
     catch (SQLException ex) 
        return "";
    

setValueAt 方法:

@Override
public void setValueAt(Object value, int rowIndex, int columnIndex) 
    String columnName = getColumnName(columnIndex);
    java.sql.Date sqlDate;
    switch (table) 
        case 0:
            if (columnName.equals("dn") || columnName.equals("de")) 
                sqlDate = new java.sql.Date(((java.util.Date) value).getTime());
                try 
                    resultSet.absolute(rowIndex + 1);
                    resultSet.updateDate(columnIndex + 1, sqlDate);
                    resultSet.updateRow();
                 catch (SQLException ex) 
                    JOptionPane.showMessageDialog(null, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                

             else 
                try 
                    resultSet.absolute(rowIndex + 1);
                    resultSet.updateString(columnIndex + 1, (String) value);
                    resultSet.updateRow();
                 catch (SQLException ex) 
                    JOptionPane.showMessageDialog(null, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                
            
    
    this.fireTableCellUpdated(rowIndex, columnIndex);

【问题讨论】:

【参考方案1】:

单元格周围的红色边框表示您输入的日期格式错误。如果您使用的是默认日期编辑器,请尝试使用简单格式输入日期,即:DD/MM/YYYY

例如,DD-MM-YYYY 格式的红色边框无法被Date 解析:

JTable 用于日期列的默认编辑器尝试从输入的值创建 Date 对象。要么符合预期的格式,要么为您提供自己的自定义编辑器。有关一些示例,请参阅How to Use Tables。

【讨论】:

以 DD/MM/YYYY 格式输入日期,谢谢!,但我有一个小问题,表格中的日期以这种格式显示:(例如:“29/Jan/ 1980") 当我尝试编辑显示为 YYYY-MM-DD 的单元格时,我如何才能在这两个视图中保持格式一致 (DD/MM/YYYY)? @user2382836 您可以创建自定义编辑器。请参阅上述教程中的编辑器和渲染器的概念。

以上是关于使用日期类型更新 JTable 单元格的主要内容,如果未能解决你的问题,请参考以下文章

pandas设置excel单元格 日期 类型 分 秒

根据数据类型,具有不同类型单元格的 Jtable

pandas设置excel单元格日期类型分秒

无法在 jquery 和 jtable 中使用 datepicker 更新和创建

Swing-JTable检测单元格数据变更事件

java导入excel时处理日期格式(已验证ok)