Java 正在使用日期类型更新JTable单元格
我已经跟踪了一些stackoverflow对这个问题的响应,我找到的每个答案都有助于解决这个问题,但是我仍然被卡住了 我仍然无法使用日期类型更新表格单元格,我单击该单元格并编辑它,但当我按Enter键时,它不会更新,甚至不允许我离开该单元格,它只是在其周围显示一个红色边框。我希望你能给我一些见解,谢谢 getColumnClass方法:Java 正在使用日期类型更新JTable单元格,java,sql,swing,jdbc,jtable,Java,Sql,Swing,Jdbc,Jtable,我已经跟踪了一些stackoverflow对这个问题的响应,我找到的每个答案都有助于解决这个问题,但是我仍然被卡住了 我仍然无法使用日期类型更新表格单元格,我单击该单元格并编辑它,但当我按Enter键时,它不会更新,甚至不允许我离开该单元格,它只是在其周围显示一个红色边框。我希望你能给我一些见解,谢谢 getColumnClass方法: @Override public Class getColumnClass(int column) throws IllegalStateException {
@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 "";
}
}
@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);
}
setValueAt方法:
@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 "";
}
}
@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
格式:
JTable
用于日期列的默认编辑器尝试根据输入的值创建date
对象。遵循预期格式或提供您自己的自定义编辑器。有关一些示例,请参见 单元格周围的红色边框表示您输入的日期格式错误。如果您使用的是默认的日期编辑器,请尝试以简单格式输入日期,即:DD/MM/YYYY
例如,这里有一个红色边框,表示不能由日期解析的DD-MM-YYYY
格式:
JTable
用于日期列的默认编辑器尝试根据输入的值创建date
对象。遵循预期格式或提供您自己的自定义编辑器。有关一些示例,请参见 单元格周围的红色边框表示您输入的日期格式错误。如果您使用的是默认的日期编辑器,请尝试以简单格式输入日期,即:DD/MM/YYYY
例如,这里有一个红色边框,表示不能由日期解析的DD-MM-YYYY
格式:
JTable
用于日期列的默认编辑器尝试根据输入的值创建date
对象。遵循预期格式或提供您自己的自定义编辑器。有关一些示例,请参见 单元格周围的红色边框表示您输入的日期格式错误。如果您使用的是默认的日期编辑器,请尝试以简单格式输入日期,即:DD/MM/YYYY
例如,这里有一个红色边框,表示不能由日期解析的DD-MM-YYYY
格式:
JTable
用于日期列的默认编辑器尝试根据输入的值创建date
对象。遵循预期格式或提供您自己的自定义编辑器。有关一些示例,请参见 以DD/MM/YYYY格式输入日期有效谢谢!,但我有一个小问题,表格中的日期是以这种格式显示的:(例如:“29/Jan/1980”)当我试图编辑单元格时,它显示为YYYY-MM-DD。如何在这两个视图(DD/MM/YYYY)中保持格式一致?@user2382836您可以创建自定义编辑器。请参阅上述教程中的编辑器和渲染器概念。以DD/MM/YYYY格式输入日期有效,谢谢!,但我有一个小问题,表格中的日期是以这种格式显示的:(例如:“29/Jan/1980”)当我试图编辑单元格时,它显示为YYYY-MM-DD。如何在这两个视图(DD/MM/YYYY)中保持格式一致?@user2382836您可以创建自定义编辑器。请参阅上述教程中的编辑器和渲染器概念。以DD/MM/YYYY格式输入日期有效,谢谢!,但我有一个小问题,表格中的日期是以这种格式显示的:(例如:“29/Jan/1980”)当我试图编辑单元格时,它显示为YYYY-MM-DD。如何在这两个视图(DD/MM/YYYY)中保持格式一致?@user2382836您可以创建自定义编辑器。请参阅上述教程中的编辑器和渲染器概念。以DD/MM/YYYY格式输入日期有效,谢谢!,但我有一个小问题,表格中的日期是以这种格式显示的:(例如:“29/Jan/1980”)当我试图编辑单元格时,它显示为YYYY-MM-DD。如何在这两个视图(DD/MM/YYYY)中保持格式一致?@user2382836您可以创建自定义编辑器。请参阅上述教程中编辑器和渲染器的概念。