TableModelListener有时只能工作

时间:2017-10-08 14:36:48

标签: java swing jtable tablemodel

我有一个使用jTable的数据库应用程序(使用netbeans),我已经为jTable添加了一个表模型监听器,所以当我编辑jTable时它还编辑了数据库(MySQL)。但是当用户点击jTable并点击一个按钮时它就会停止工作。

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

更新表格:

<div [attr.role]="myAriaRole"></div>
<div [class.extra-sparkle]="isDelightful"></div>
<div [style.width.px]="mySize"></div>

}

tablemodellistener类:

    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;
}

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

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());

返回当前ID:

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);

} 

1 个答案:

答案 0 :(得分:1)

  

然而,当用户点击jTable并单击按钮时它会停止工作。

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

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

查看Table Stop Editing有两种方法:

1)向表中添加一个属性:

JTable table = new JTable(...);
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);

2)将代码添加到按钮的监听器:

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

您可能还想查看可能更适合使用的Table Cell Listener,而不是使用TableModelListener。