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

标签 java sql swing jdbc jtable

我已经关注了一些 stackoverflow 对此问题的响应,我发现的每个答案都为解决该问题做出了一些贡献,但我仍然陷入困境。

我仍然无法使用日期类型更新表格单元格,我单击该单元格并编辑它,但是当我按 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);
}

最佳答案

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

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

enter image description here

JTable 用于日期列的默认编辑器尝试根据输入的值创建 Date 对象。要么遵守预期的格式,要么提供您自己的自定义编辑器。请参阅How to Use Tables举一些例子。

关于java - 使用日期类型更新 JTable 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20476322/

相关文章:

Java if 语句

java - Spring调度程序CPU使用率

mysql - 将每个用户的所有发件人和发件人邮件分组

SQL - 子查询(列名)

java - JPanel 中的图片

java - 如何以编程方式从浏览器缓存中删除旧小程序?

java - 用 ASM 结果修改方法体 "Exceeded max stack size during"

mysql - 在 MySQL 中有条件地加入

java - 如何在jtable中添加表头和滚动条。 java

java - JComponent InputMap 神秘地被删除