2013-06-05 32 views
2

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

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); 
    } 
} 
+0

请澄清:您的代码具体没有做什么,您期望它做什么?它目前在做什么,你不指望它在做什么?上面的代码应该代表什么?上面的代码中有什么指向任何JComboBox?这个JComboBox与这个问题有什么关系?为什么在代码中有默认注释,并且没有可能帮助我们理解代码的注释? –

+0

这里jComboBox的变量名是JcbSub。 我想增加每一个选择的行。 –

+0

我不想将evry选择的第一行从jcbSub覆盖到jTable –

回答

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()关闭它。事实上,由于您没有通过对象stmt执行任何查询,因此不需要该方法中的所有JDBC代码。

+0

那么我该如何摆脱这个问题呢? –

+0

我想在每个选择中包含jTable中的行 –

+0

使其成为变量,即在方法外的类体中声明。 –

0

你的代码是不完整的,我supose因为ü没有使用的创建语句和行的心不是任何东西任何环路内到任何数据集内行驶。

的jtable.setValueAt方法需要的值,列的索引,并且该行的索引,

setValueAt(对象O,INT山口,INT行)

你只是设置第一当把零置于最后一个参数 jTable3.setValueAt(st,row,0);

1

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

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

+0

可以请你为我编辑代码,因为我是新来的java。 –

+1

然后我建议通读[如何使用表格](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html)是您的下一个优先事项 – MadProgrammer