有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java TableModelListener有时只起作用

我有一个使用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;
}

共 (1) 个答案

  1. # 1 楼答案

    It works however when the user clicks off the jTable and clicks a button it stops working.

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

    因此,当您单击另一个组件时,需要通知表停止编辑。然后将保存数据并调用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更合适