2013-12-09 73 views
0

我已經按照這個問題的一些計算器的迴應,我發現每一個答案都貢獻了一點點來解決這個問題,但我仍然堅持。更新JTable單元格與日期類型

我還是不能更新日期類型的表單元格,我點擊細胞並對其進行編輯,但是當我按下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); 
} 

回答

3

細胞周圍的紅色邊框表明您輸入的日期格式是錯誤的。如果您使用的是默認日期編輯器,則嘗試使用簡單格式輸入日期,即:DD/MM/YYYY

例如這裏是一個DD-MM-YYYY格式不能被Date解析紅色邊框:

enter image description here

是日期列使用JTable默認編輯試圖從進入創建Date對象值。既可以符合預期的格式,也可以爲您提供自己的自定義編輯器。有些示例參見How to Use Tables

+1

好抓;更多[這裏](http://stackoverflow.com/a/7539298/230513)。 – trashgod

+0

以DD/MM/YYYY格式輸入日期非常有用,謝謝!但我有一個小問題,表中的日期以這種格式顯示:(例如:「29/Jan/1980」)當我嘗試編輯它顯示的單元格爲YYYY-MM-DD如何在這兩個視圖(DD/MM/YYYY)中保持格式一致? – user2382836

+0

@ user2382836您可以創建自定義編輯器。在上述教程中查看編輯器和渲染器的概念。 – tenorsax