Java TableModelListener有时才起作用

Java TableModelListener有时才起作用,java,swing,jtable,tablemodel,Java,Swing,Jtable,Tablemodel,我有一个使用jTable的数据库应用程序(使用netbeans),我在jTable中添加了一个表模型侦听器,因此当我编辑jTable时,它也会编辑数据库(MySQL)。但是,当用户单击jTable并单击按钮时,它就会停止工作 编辑:我意识到只有在运行“jTable1.setModel(DbUtils.resultsetTableModel(mySql.UpdateTable());”更新表时,它才会停止工作。当我按下运行这条线的按钮时,它停止工作,任何其他按钮或任何其他时间,它都会工作 要更新表

我有一个使用jTable的数据库应用程序(使用netbeans),我在jTable中添加了一个表模型侦听器,因此当我编辑jTable时,它也会编辑数据库(MySQL)。但是,当用户单击jTable并单击按钮时,它就会停止工作

编辑:我意识到只有在运行“jTable1.setModel(DbUtils.resultsetTableModel(mySql.UpdateTable());”更新表时,它才会停止工作。当我按下运行这条线的按钮时,它停止工作,任何其他按钮或任何其他时间,它都会工作

要更新表,请执行以下操作:

    public ResultSet UpdateTable(){

        Connection con = connect();
    try{
        Statement s = con.createStatement();
        ResultSet resultset;
        resultset =  s.executeQuery("select * from customera");
        return resultset;
        }
    catch(SQLException e){
        System.out.println(e.getMessage());
    }
    return null;
}
}

tablemodellistener类:

import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;

public class TableActionListener implements TableModelListener{

Rob1 r;

public TableActionListener(){
    r = new Rob1();
    }

public void tableChanged(TableModelEvent e){
    System.out.println("action");
    int id = r.getID();
    int column = e.getColumn();
    int row = e.getFirstRow();



    }

}
在构造函数中添加了类似的表模型侦听器:

jTable1.getModel().addTableModelListener( new TableActionListener());
要单击该行,我添加了以下代码:

int id;

private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {                                     
    // TODO add your handling code here:
    System.out.println(evt.getClickCount());

        int row = jTable1.getSelectedRow();
        int col = jTable1.getSelectedColumn();
        id = (int)jTable1.getModel().getValueAt(row, 0);

} 
要返回当前id,请执行以下操作:

 public int getID(){
    return id;
}
但是,当用户单击jTable并单击按钮时,它就会停止工作

默认情况下,仅当移动到表格中的另一个单元格时,表格单元格编辑器才会停止编辑

因此,当您单击另一个组件时,需要通知表停止编辑。然后将保存数据并调用TableModelListener

请查看两种方法:

1) 将属性添加到表中:

JTable table = new JTable(...);
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
2) 向按钮的侦听器添加代码:

if (table.isEditing())
     table.getCellEditor().stopCellEditing();

您可能还想检查哪一种可能更适合使用,而不是TableModelListener。

您可以更具体地说明您想要实现什么以及失败的原因吗?在setModel之后,侦听器侦听过时的模型,需要将侦听器添加到新模型中。这可能是问题吗?你说的“设置模型”是什么意思?我试过了,但也有同样的问题,我编辑了我的原始帖子来展示我的发现。