2014-01-05 39 views
0

当用户按下“添加”或“删除”按钮(JtoggleButton)然后按下按钮()时,我编写了一个用于向数据库添加/删除数据的代码, JButton的),他们的标签数从1到9在将数据从数据库添加到jtable时有额外的列

下面的代码的用户界面: enter image description here

当我试图在第一时间将数据添加到表中,它的确定和数量列仍为3列: enter image description here

但是当我连续第二次或第三次添加数据时,还有更多3个额外的空白列也添加到表中,我不需要它。: enter image description here

这里我认为问题发生的代码:

final DefaultTableModel defaultmodel2 = new DefaultTableModel(); 
final JToggleButton tglbtnAdd = new JToggleButton("Add"); 
final JToggleButton tglbtnDelete = new JToggleButton("Delete"); 


    JButton button = new JButton("1"); 
    button.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      try { 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      Connection dbconbt1 = DriverManager.getConnection("" +"jdbc:sqlserver://localhost;databaseName=Store;user=<>;password=<>"); 
      Statement sqlstatement = dbconbt1.createStatement(); 
      ResultSet dbresultset1 = sqlstatement.executeQuery("select * from Store.dbo.Product where ProductID = 'P-1'"); 
      ResultSetMetaData rsmetadata = dbresultset1.getMetaData();  // Get metadata on them 
      int numcols = rsmetadata.getColumnCount(); // How many columns? 

      if(tglbtnAdd.isSelected() == true) 
       { 
       for (int i = 1; i <= numcols; i++) 
       { 
        defaultmodel2.addColumn(rsmetadata.getColumnName(i)); 
       } 

       while (dbresultset1.next()) 
       { Vector<Object> row = new Vector<Object>(numcols); 
        for (int i = 1; i <= numcols; i++) 
        { 
        row.addElement(dbresultset1.getObject(i)); 
        } 
        defaultmodel2.addRow(row); 

       } 

       } 
      if(tglbtnDelete.isSelected() == true) 
       { 
       defaultmodel2.removeRow(0); 
       } 
      // Get row 
      dbresultset1.close(); 
      sqlstatement.close(); 
      dbconbt1.close(); 
      } catch (SQLException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
      e.printStackTrace(); 
      } 
     } 
    }); 

回答

2

每次调用actionPerformed时候,你还呼吁defaultmodel2.addColumn(rsmetadata.getColumnName(i));

这意味着,每一个actionPerformed方法被调用时,它增加了更多的列列模型。

你有几个选择...

  1. 检查,看看表模型已经包含列,不添加新的
  2. 检查,看看表模型具有特定的列和如果它没有添加它
  3. 使用“产品列表”表中的列代替...
+0

非常感谢。我的问题解决了。 –

+0

这是一个很好的变化:P – MadProgrammer