gpt4 book ai didi

java - 为什么使用 jcombobox actionListener 后没有执行 tableModelListener 代码

转载 作者:行者123 更新时间:2023-12-01 13:14:29 25 4
gpt4 key购买 nike

我有一个简单的程序,可以使用 JTable 显示数据库的表。我有一个组合框,列出所有可用的表,还有一个 actionListener,每次更改时将模型设置为表。这按预期工作。我遇到的问题是,当选择一个表时,程序永远不会到达 tableModelListener 的代码,因此不会更新数据库。

如果程序输入了某些代码块,并且一旦组合框 actionListener 被激活,程序就永远不会进入表模型监听器,我会通过放置弹出消息来进行一些调试。

下面是大部分代码。

classes.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent ev) {
JComboBox cb = (JComboBox)ev.getSource();
classname =(String)cb.getSelectedItem();

String genQuery="select * from "+classname;
String query = genQuery ;


//adding info from databae to table/
ResultSet rs=null;
try {
rs = stmt.executeQuery(query);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
table.setModel(DbUtils.resultSetToTableModel(rs));


}

});

//

//update database
table.getModel().addTableModelListener(new TableModelListener() {

@Override
public void tableChanged(TableModelEvent e) {
//catch events
JOptionPane.showMessageDialog(null,"inside table listener");
int row = e.getFirstRow();
int column = e.getColumn();
TableModel model = (TableModel)e.getSource();
Object data = model.getValueAt(row, column);
JOptionPane.showMessageDialog(null, "row: "+ row+" column: "+column+" data "+data);

String dt = (String)data;
int val=(Integer) null;
if(dt.equals("true"))
val=1;
if(dt.equals("false"))
val=0;


Object student = model.getValueAt(row, 1);
String stud = (String)student;
String colname =table.getColumnName(column);



String edit="update "+classname+" set "+colname+" = ? where studentName= ?";

try {
conn.setAutoCommit(false);
PreparedStatement updateinfo = conn.prepareStatement(edit);


updateinfo.setInt(1, val);
updateinfo.setString(2, stud);
updateinfo.executeUpdate();
conn.commit();
JOptionPane.showMessageDialog(null, stud+" has been updated.");
} catch (SQLException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}

}



});

最佳答案

您的操作监听器创建一个新的表模型,并用这个新的表模型替换 JTable 的模型。因此您之前添加的 TableModelListener 仍然监听旧的表模型,该模型不再使用。

不要替换表模型,而是更改其内容。或者替换表模型,但将 TableModelListener 添加到新表模型中。

关于java - 为什么使用 jcombobox actionListener 后没有执行 tableModelListener 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22583304/

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