gpt4 book ai didi

java - 更新单元格值 (JTable)

转载 作者:行者123 更新时间:2023-12-02 07:32:49 25 4
gpt4 key购买 nike

我在更新 JTable 的单元格值时遇到问题。我想要做的是从 JTable 中选择特定单元格后,我应该能够进行编辑,并且操作必须反射(reflect)后端的数据库。我正在使用 HSQL。我的表有 4 列,其中有 1 个 PK。请给我一个替代方案和/或通过替换 * 为我提供一些代码。我是新人,只是一个初学者。

d_view.addActionListener(new ActionListener() { //----action listener of a button
public void actionPerformed(ActionEvent po) {
try {
Connection connec;
Class.forName("org.hsqldb.jdbcDriver");
connec = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/","SA", "");
java.sql.Statement stt=connec.createStatement();
ResultSet rs=stt.executeQuery("select * from DepReg");//----------TO VIEW DATA IN TABULAR FORMAT
ResultSetMetaData rt=rs.getMetaData();
int cols=rt.getColumnCount();
String c[] =new String[cols];
for(int i=0;i<cols;i++){
c[i]=rt.getColumnName(i+1);
dm.addColumn(c[i]);
}
Object row[]=new Object[cols];
while(rs.next()){
for(int i=0;i<cols;i++){
row[i]=rs.getString(i+1);
}
dm.addRow(row);
}
table.setModel(dm);
connec.close();
}
catch (Exception ty) {}
}
});//--------HERE THE PROBLEM STARTS
table.getModel().addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent tme) {
int rows=tme.getFirstRow();
int colms=tme.getColumn();
TableModel model=(TableModel)tme.getSource();
String colname=model.getColumnName(colms);
Object data=model.getValueAt(rows, colms);
//*********EDIT/REPLACE THE CODE ***************//
try {
Connection connec;
Class.forName("org.hsqldb.jdbcDriver");
connec = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/","SA", "");
java.sql.Statement stt=connec.createStatement();
//-----------I WILL INCLUDE AN UPDATE STATEMENT OVER HERE BASED ON THE VALUE SELECTED
}
catch (Exception ae) {}
}
});

最佳答案

  • 数据库连接不应发生在事件调度线程上。他们只是太慢了。将其移至后台线程。请参阅Swing concurrency tutorial了解更多信息
  • 我不太清楚您是否已经能够编辑表格,但如果不能,可以通过确保 TableModel 来实现这一点。那isCellEditable方法返回 true对于您想要可编辑的单元格,并且您已设置 TableCellEditor在您的JTable
  • 而不是添加 TableModelListener要更新您的数据库,我会将该逻辑移动到自定义 TableModel 。每次setValueAt方法被调用,你就知道已经进行了更改。然后您可以更新数据库(同样,不是在事件调度线程上)。
  • 如果数据库也可以从其他地方更新,您可能会希望在某些时刻及时轮询数据库以更新您的 TableModel以反射(reflect)数据库的最新状态。确保在工作线程上进行轮询。然后您可以创建一个全新的 TableModel在工作线程上,并替换 TableModel事件分派(dispatch)线程上的表的内容。或者,您可以更新 EDT 上的现有模型(不要忘记触发事件,或者如果您的模型从 DefaultTableModel/AbstractTableModel 扩展,您可以使用可用的 API)。

我还建议阅读 Swing table tutorial了解更多信息。

关于java - 更新单元格值 (JTable),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12702587/

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