覆盖jTable中的值

时间:2013-06-05 21:38:07

标签: java swing netbeans-6.9

为什么我的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);
    } 
}

3 个答案:

答案 0 :(得分: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代码。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

你的代码是不完整的,因为你没有使用所创建语句的任何内容,并且行不在任何循环中以在任何数据集内传播。

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

setValueAt(Object o,int col,int row)

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