2009-01-26 95 views
3

我正在使用Java,並且我試圖使JTable中的單元格可編輯。我的類實現的TableModel和延伸AbstractTableModel上(這樣我可以使用的方法fireTableCellUpdated(rowIndex, columnIndex)),我已經實現的方法isCellEditable()setValueAt()。 我表示在表中的單個小區作爲類細胞的對象。使JTable中的單元格可編輯 - 單元格的默認值

現在,這裏是我的問題是:單元格已經可編輯了,當我點擊它時,光標出現在單元格中,但是在單元格中也出現了這樣的字符串:[email protected]。我刪除了這個字符串並將單元格中的值,然後點擊Enter就可以了,但是我希望當我點擊單元格的時候什麼也沒有,一個空字符串,而不是[email protected]。我不知道如何將這個空字符串設置爲默認值和在哪裏。

我的單元類存儲有關單元格的信息(特徵),如單元格的顏色及其值作爲實例變量。

如果您需要更多信息,請告訴我。

回答

1

您是否在使用合適的TableCellEditor來顯示編輯組件?

class MyTableCellEditor 
     extends DefaultCellEditor 
{ 
    @Override 
    public Component getTableCellEditorComponent(
      JTable table, 
      Object value, 
      boolean isSelected, 
      int row, 
      int column) 
    { 
     final JTextField c = (JTextField) super.getTableCellEditorComponent(
      table, 
      ((Cell) value).text, // edit the text field of Cell 
      isSelected, 
      row, 
      column); 

     c.selectAll(); // automatically select the whole string in the cell 
     return c; 
    } 
} 

除了自定義單元格渲染器之外,您還需要告訴您的表使用此自定義單元格編輯器。

myTable.setDefaultEditor(Cell.class, new MyTableCellEditor()); 
7

您是否爲您的JTable一個TableCellRendererTableCellEditor

若要顯示單元格,則TableCellRenderer用於呈現TableModel中位置的內容。默認情況下,它將在該位置使用ObjecttoString方法,以便解釋在單元中顯示的[email protected] - 這是在您的Cell對象上調用toString方法的結果。

通過編寫自定義單元格渲染器(實現TableCellRenderer類),你就可以回到你想要用來顯示Cell對象,使用getTableCellRendererComponent方法Component。在你的情況下,你可能想要實現TableCellRendererJLabel的子類,並將設置標籤的內容以反映你的Cell對象的內容。

作爲編輯單元格,則TableCellEditor當你想在JTable編輯單元接收來自TableModelObjectTableCellEditor將返回Component,該值用於使用getTableCellEditorComponent方法編輯單元格內容(Object)。

在您提供的情況下,我認爲製作一個實現了TableCellEditor界面的JTextField將能夠爲您完成這項工作。當您覆蓋getTableCellEditorComponent時,請檢查您是否有Cell對象(即object instanceof Cell)的實例,如果是這種情況,請初始化您的JTextField以包含要顯示或編輯的對象Cell的內容。

推薦閱讀:我發現從IBM developerWorks上的Rendering cells in Swing's JTable component文章是在學習如何應對JTable S和它們的細胞渲染和編輯功能非常有用。特別是,Creating custom renderersEditiing table cells部分可能是感興趣的。