如何为JTable Cell更改实现事件处理程序

时间:2017-03-19 16:52:54

标签: java swing netbeans event-handling jtable

我想知道如何为jTable单元格更改实现事件处理程序。我有这个jtable,我动态地向这个jtable添加数据

添加数据的代码段是:

JSONArray objResponseArray = (JSONArray) response.get("response");
DefaultTableModel model = (DefaultTableModel) tblAccounts.getModel();
for (int i = 0; i < objResponseArray.size(); i++) {
    JSONObject objTempAccount = (JSONObject) objResponseArray.get(i);
    Object[] row = {
         objTempAccount.get("Account ID").toString(),
         objTempAccount.get("Account Type").toString(),
         objTempAccount.get("Account Number").toString(),
         objTempAccount.get("Sort Code").toString(),
         objTempAccount.get("Balance").toString(),
         objTempAccount.get("Card").toString()
   };
   model.addRow(row);
}

在此表中,我已编辑了单元格。从那里说,如何触发事件处理程序在单元格更改时触发。当它被触发时,我想获得整行并更新数据库。

重要提示:我正在使用Netbeans,并且从jtable元素的属性窗口中的事件中选择事件处理程序,请帮我实现。

2 个答案:

答案 0 :(得分:1)

您可以向TableModelListener添加TableModel。更改数据时将生成事件。但是,如果您开始将单元格和表格编辑到另一个单元格而不更改任何数据,它也会生成一个事件。

因此,您可能需要考虑Table Cell Listener,它只会在实际更改单元格中的数据时生成事件。

在这两种情况下,事件都将包含已更改的单元格的行/列,因此您可以使用表格的getModel().getValueAt(...)方法轻松地从行中的其他列获取日期。

  

我正在使用Netbeans ......

这应该是无关紧要的。您应该学习如何使用Swing,而不是IDE。如果您切换IDE,代码可能无法移植,尤其是构建框架的代码。也就是说,无论如何你都需要手动修改另一个IDE中的代码。

答案 1 :(得分:0)

    CellEditorListener ChangeNotification = new CellEditorListener() { 
   public void editingCanceled(ChangeEvent e) {

       //Action to be performed
    }


    public void editingStopped(ChangeEvent e) {
        //Action to be performed
    }
};
use the above code inside the class before the constructor.

Inside the constructor give

tablename.getDefaultEditor(String.class).addCellEditorListener(ChangeNotification);