2017-10-08 102 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

我試過這個,但有同樣的問題,我編輯了我原來的帖子,以顯示我發現了什麼。 –

相關問題