2

为什么我的 jTable 中的值会覆盖从 jcombobox 中选择的第一个值?有人可以帮我解决这个代码:

private void jButton15ActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // TODO add your handling code here:
    Connection con;
    Statement stmt;
    try {
        // TODO add your handling code here
        Class.forName("sun.jdbc.odbc.JdbcOdbc");
    } catch (ClassNotFoundException ex) {
        JOptionPane.showMessageDialog(null, ex);
    }
    try {
        con= DriverManager.getConnection("Jdbc:Odbc:food");
        stmt= con.createStatement();
        int row = 0;

        String st= JcbSub.getSelectedItem().toString();
        jTable3.setValueAt(st, row, 0);    

            row ++;

        } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, ex);
    } 
}
4

3 回答 3

1

JTable#setValue只会更改现有的行值。

您应该使用TableModel添加新行。如果您使用 aDefaultTableModel您可以使用该addRow方法

于 2013-06-05T21:54:55.933 回答
1

尽管您确实在最后增加了行号,但您已将其声明为局部变量 ,该变量会丢失其值并在每次方法调用时初始化为 0。因此,您的第一行每次都会被覆盖。

int row = 0; // move this out to a member variable

String st= JcbSub.getSelectedItem().toString();
jTable3.setValueAt(st, row, 0);    

row ++; // this increment currently has no effect on next method call

您还每次都打开一个新的数据库连接,而不是通过调用来关闭它con.close()。事实上,由于您没有通过Statement对象 stmt 执行任何查询,因此不需要方法中的所有 JDBC 代码。

于 2013-06-05T21:47:11.523 回答
0

您的代码不完整,我想是因为您没有使用任何已创建的语句,并且该行不在任何循环内以在任何数据集中移动。

jtable.setValueAt 方法需要值、col 的索引和行的索引,

setValueAt(对象 o,int col,int 行)

将零放在最后一个参数 jTable3.setValueAt(st, row, 0); 时,您只是在设置第一行

于 2013-06-05T21:46:41.360 回答