当前位置: 首页 > 知识库问答 >
问题:

正在更新单元格值(JTable)

松旭
2023-03-14

我在更新JTable的单元格值时遇到了一个问题。我想做的是在从JTable中选择一个特定的单元格之后,我应该能够进行编辑,并且该操作必须反映后端的数据库。我在用HSQL。我的表有4列,有一个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) {}
        }
});

共有1个答案

郝昊天
2023-03-14
  • 数据库连接不应发生在事件调度线程上。他们简直太慢了。将其移动到后台线程。有关更多信息,请参阅Swing并发教程
  • 我不完全清楚您是否已经能够编辑您的表,但如果不能,则可以通过在TableModel中确保isCelleditable方法为您希望可编辑的单元格返回true并且在JTable
  • 上设置了 TableCelditor来实现
  • 不是添加TableModelListener来更新数据库,而是将该逻辑移动到自定义的TableModel。每次调用setvalueat方法时,您都知道进行了更改。然后可以更新数据库(同样,不是在事件调度线程上)。
  • 如果数据库也可以从其他地方更新,您可能希望在某些时刻轮询数据库,以更新tablemodel以反映数据库的最新状态。确保在辅助线程上进行轮询。然后,您可以在辅助线程上创建一个全新的TableModel,并在事件调度线程上替换表的TableModel。或者您可以更新EDT上的现有模型(不要忘记激发事件,或者如果您的模型扩展自DefaultTableModel/AbstractTableModel,您可以使用可用的API)。

我还建议阅读Swing table教程获得更多信息。

 类似资料:
  • 我最近开始用JavaFX(jdk 1.8.0_66)编程一个应用程序。我有几个表(视图),其中之一应该是关于所有'订阅'对象的概述。因此,我创建了表视图,并用一个可观察的列表填充它: 例如,我的桌子有点像这样: 现在,每当我向列表中添加参与者时,相应单元格中的数字应该增加一个,但不会增加——除非我重新启动应用程序。希望你们中有人能帮助我/解释我有什么问题。

  • 我有一个jtable保存账本文件记录并将它们发送出去。

  • 我有一个问题,我无法解决单独和帮助其他话题在那里。找到了一些相似的,但它没有帮助。 我的问题有点棘手,我想,我会尽力解释清楚。 因此,我得到了一个包含两列的JTable,列2和列3是可编辑的,列4是这两个列的乘积(col4=col2*col3)。我要做的是,当我编辑第2或第3列时,第4列将自动更新它的值。我理解这一点,但不完全理解。只有当我完成MouseClick编辑时单元格才会更新。如果编辑是通

  • 我一直在试图找到一种通过直接输入来更新我的细胞的方法。从我的研究来看,每个人似乎都说你必须使用 尽管如此,它还是让我投myJTable-- 以下是我当前的表代码,如果这有帮助的话: 我怎么可能从用户直接输入更新的单元格中保存数据?谢谢!

  • 有人能帮忙吗?我有一个现有代码,该代码当前根据V列中的单元格值(上诉记录)将整行数据从一张表(质量日志)复制到另一张表(上诉日志)。 之前,它已经从原始(质量日志)表中删除了该行,但我现在希望更改代码,以便将单元格值更改为(正在上诉),然后将其移动到下一页(上诉日志)。 请参阅下面我的代码。我已用**表示我试图更改代码

  • 我有一个带有单元格编辑功能的数据表,我想通过应用一个不同样式的类来更新数据表以显示修改后的记录。 以下是我的问题: 如果在激发onCellEdit事件时未更新数据表,则记录已正确更新,但无法看到已修改行的applyed style类。 如果在onCellEdit事件激发时更新数据表,并使用return键更新值,则一切正常,并且可以看到修改行的应用样式类。 如果我在单元格编辑事件触发时更新数据表,并