2013-08-01 29 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方法。 这就是为什么我的建议仍然是使用该模型。您可以轻松检查行索引,以确保只对第一行进行“充值”。 –

相关问题