我编写了一个代码,用于在数据库中添加/删除数据到JTable,当用户按下“添加”或“删除”按钮(JtoggleButton)时按下3列,然后按下按钮(JButton),它们的标签是1中的数字到9。
这里是代码的用户界面:
当我第一次尝试向表中添加数据时,没关系,列数仍为3列:
但是当我连续第二次或第三次添加数据时,表中还会添加3个额外的空白列,我不需要它:
这里是我认为问题发生的代码:
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();
}
}
});
答案 0 :(得分:2)
每次拨打actionPerformed
时,您都会拨打defaultmodel2.addColumn( rsmetadata.getColumnName(i));
这意味着,每次调用actionPerformed
方法时,都会向列模型添加更多列。
你有几个选择......