2017-10-08 53 views
0

我有一个使用jTable的数据库应用程序(使用netbeans),我在jTable中添加了表模型侦听器,所以当我编辑jTable时它也编辑数据库(MySQL)。然而,当用户点击jTable并点击一个按钮时,它会停止工作。我已经意识到,它只停止工作,当我运行“jTable1.setModel(DbUtils.resultSetToTableModel(mySql.UpdateTable()));”更新表格。当我按下运行这条线的按钮时,它停止工作,任何其他按钮或任何其他时间,并且它工作。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; 
} 

}

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

你可以更具体地说明你想要达到什么目的,它是如何失败的? –

+1

setModel之后,侦听器侦听过时的模型,需要将侦听器添加到新模型中。这可能是问题吗? –

+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。

+0

我试过这个,但有同样的问题,我编辑了我原来的帖子,以显示我发现了什么。 –

相关问题