2013-08-01 35 views
0

我輸入我的代碼:如何添加一個自定義的CellEditorListener到我的JTable?

private void addMyCellEditorListener() { 

    class MyCellEditorListener implements CellEditorListener 
    { 
     public MyCellEditorListener() {} 

     public void editingCanceled(ChangeEvent e) {} 

     public void editingStopped(ChangeEvent e) { 
      if(row == 0 && column > 0) 
       rechargeTableWithFindedResults(graphicTable.getValueAt(row,column)); 
      else 
       dataTable.setValueAt(graphicTable.getValueAt(row,column),row,column); 
     } 
    }; 

    .... addCellEditorListener(new MyCellEditorListener()); 
} 

我想我graphicTable檢測數據變爲它的細胞通過給它定製CellEditorListener,但我真的不明白如何添加它。我試了幾次用類似下面的代碼:

DefaultCellEditor editor = new DefaultCellEditor(new JTextLabel()); 
editor.addCellEditorListener(new MyCellEditorListener()); 
this.graphicTable.setCellEditor(editor); 

...或:

this.graphicTable.setCellEditor(this.graphicTable.getCellEditor().addCellEditorListener(new MyCellEditorListener())); 

...但是這些技術給我一個NullPointerException在這兩種情況下。

我環顧四周通過論壇獲得解決方案,但他們只是讓我更困惑。

每一個提示將不勝感激。

在此先感謝。

+2

爲更好的幫助,儘快發佈一個[SSCCE](http://sscce.org/),短的,可運行的,可編譯的 – mKorbel

回答

3

您的方法不正確。 您可以輕鬆檢測到您的TableModel中的數據更改,特別是setValueAt方法。一旦您檢測到變化並對其作出反應,您必須調用fireTable..方法之一,讓表格和所有其他聽衆知道數據已更改

根本沒有必要將任何偵聽器分配給單元編輯器。

+0

我想我需要一些監聽器添加到JTable,因爲我必須使用第一行像「搜索框」;例如,如果我在單元格(0,1)中輸入關鍵字,則JTable必須檢測用戶輸入的字符串,並使用它爲表格重新充電,結果是它在從TableModel預先充電的某些數據上找到。 我想檢測不是TableModel上的數據更改,而是JTable圖形網格上的數據更改,因爲JTable使用它自己的getValueAt()和setValueAt()方法。感謝您的回覆 –

+1

Swing是使用MVC模型設計的。所以JTable是一個視圖/控制器,你的表模型是一個數據。該表不保留任何數據模型。無論何時在單元格中進行編輯,都會調用模型的setValueAt方法。 這就是爲什麼我的建議仍然是使用該模型。您可以輕鬆檢查行索引,以確保只對第一行進行「充值」。 –

相關問題