[英]TableModelListener not always working
我正在使用Java swing開發應用程序,在女巫中有一個jTable
我是從數據庫中導入數據的。我想直接從jTable
更新我的數據庫。所以基於我發現的代碼(對不起,我不記得了鏈接)我設法使用TableModelListener
做到了這一點,但是我發現一個小問題,只有在我不使用其他任何東西的情況下,我才能使用TableModelListener
,例如,如果我單擊此按鈕后我要返回更新,我有一個按鈕巫婆會做任何事情表中的任何單元都沒有發生任何事情,就像TableModelListener
被停用了。如果我首先更新表,它會完美地工作,但是如果我在做其他事情之后更新它,那將無法工作。 這是我的代碼的一部分(我的代碼太長了),我試圖解決此問題,但我無法
public home() {
initComponents();
connection();
jTable.getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
modiftable(e);
}
});
if(jTable.getCellEditor()!=null)
{
jTable.getCellEditor().stopCellEditing();
}
}
private void modiftable(TableModelEvent e) {
if (e.getType() == TableModelEvent.UPDATE) {
connection();
home.model = (DefaultTableModel) ((TableModel) (e.getSource()));
int fila = e.getFirstRow();
int col = e.getColumn();
String data = String.valueOf(home.model.getValueAt(jTable.getSelectedRow(), jTable.getSelectedColumn()));
String rqt = "";
String rqt2 = "";
if (col == 1) {
String nom = String.valueOf(home.model.getValueAt(jTable.getSelectedRow(), 0));
String poste = String.valueOf(home.model.getValueAt(jTable.getSelectedRow(), 3));
String rqqq = "SELECT `CIE/SFIN`,`SFIN OU CIE` FROM `allin` WHERE `Nom produit`='" + nom + "' and `poste`='" + poste + "'";
String pos = "";
String old = "";
ResultSet rt = selection(rqqq);
try {
while (rt.next()) {
old = rt.getString(1);
pos = rt.getString(2);
System.out.println(pos);
}
} catch (SQLException ex) {
Logger.getLogger(home.class.getName()).log(Level.SEVERE, null, ex);
}
if (pos.equals("CIE")) {
rqt = "UPDATE `cie` SET `CIE`='" + data + "' WHERE `CIE`='" + old + "'";
rqt2 = "UPDATE `produit` SET `CIE`='" + data + "' WHERE `CIE`='" + old + "'";
System.out.println(rqt);
} else if (pos.equals("SFIN")) {
rqt = "UPDATE `sfin` SET `SFIN`='" + data + "' WHERE `SFIN`='" + old + "'";
rqt2 = "UPDATE `produit` SET `SFIN`='" + data + "' WHERE `SFIN`='" + old + "'";
System.out.println(rqt);
}
DataBase db = new DataBase();
java.sql.PreparedStatement psm;
java.sql.PreparedStatement psm2;
try {
psm = db.con.prepareStatement(rqt);
psm.executeUpdate(rqt);
psm2 = db.con.prepareStatement(rqt2);
psm2.executeUpdate(rqt2);
} catch (SQLException ex) {
Logger.getLogger(home.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
所以我找到了解決我問題的方法...每次我調用jTable.setModel時tableModelListener都不起作用,所以我所做的是:每次我調用jtable.setModel時都刪除tableModelListener,然后再次像這樣調用它:
jTable.setModel(model);
jTable.getModel().removeTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
modiftable(e);
}
});
jTable.getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
modiftable(e);
}
});
if(jTable.getCellEditor()!=null)
{
jTable.getCellEditor().stopCellEditing();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.