gpt4 book ai didi

java - TableModelListener 并不总是工作

转载 作者:太空宇宙 更新时间:2023-11-04 10:15:47 25 4
gpt4 key购买 nike

我正在使用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();
}

关于java - TableModelListener 并不总是工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51746667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com