java - TableModelListener 并不总是有效
问题描述
我正在使用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();
}
推荐阅读
- jquery - 如何使用类获取div内元素的索引
- node.js - Linux、Nginx 服务器和 Node JS 上的 HttpContext.Current.User?
- python - Search for keyword in user input and find the corresponding keyword in dictionary
- html - 已禁用 Datepicker 已验证
- python - How can I find the indices of any two of the numbers, whose sum is equal to the target sum in Python?
- xcode - 用户定义的值“FLUTTER_BUILD_NAME”和“FLUTTER_BUILD_NUMBER”不继承自项目设置
- python - Python OpenCV 添加的文本质量不好
- discord.js - 当有人加入我的服务器时,我需要一个 AutoRole 命令
- python - Get argument names from a parser, without parsing arguments in argparse python
- redis - 如何使用 Redis 查找位于不同键的两个值之间的结果?