我有一个JTable,它显示一个Object [] []数据。 在同一屏幕上还有一个表单,允许用户将项目添加到列表中的对象。虽然在我的生活中,当用户按下“添加项目”按钮时,我无法获得表格中显示的列表。
(它被附加到数组中,我可以将它打印到屏幕上,只是无法让表格改变。)
这是表格的装箱
Object[] tableHeadings = {"Item Name","Qty/Weight","Price"};
ShoppingApplication shoppingApplication = new ShoppingApplication();
Object[][] tableData = shoppingApplication.generatePurchaseTableData();
final JTable tblBill = new JTable(tableData, tableHeadings);
以下是生成的表格数据:
/**
* Generates data in the correct format to go into the table
* from the purchase list
* @return
*/
public Object[][] generatePurchaseTableData(){
Object[][] results = new Object[listOfPurchases.size()][2];
for (int i = 0; i<listOfPurchases.size(); i++){
Purchase purchase = listOfPurchases.get(i);
Object[] innerObject =
{purchase.getProductName(),
purchase.getPricePerUnit(),
purchase.getTotalPrice()};
results[i] = innerObject;
}
System.out.println(results.length);
return results;
}
}
这是动作监听器
/* Add Action Listeners */
cmdAddItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
AddPurchase addPurchase = new AddPurchase(
(radWeight.isSelected()) ? 'w' :(radQty.isSelected()) ? 'q' : 'u',
txtNameOfItem.getText(),
txtAmount.getText(),
txtUnits.getText(),
txtPricePerUnit.getText());
ShoppingApplication sa = new ShoppingApplication();
Object[][] newData = sa.generatePurchaseTableData();
//TODO make tblBill updata it's contents
}
});
从上面的代码来看,它确实看起来我没有付出太多努力,但我实际上一直试图让它工作几个小时,尝试使用不同的方法,数据结构,并没有去哪里去回到开头,这就是上面的代码吧。
我用Google搜索了一下,似乎找不到任何东西,想不出为什么没有其他人似乎陷入困境。 (也许我只是很厚)但希望这篇文章也会帮助其他人。
提前致谢:)
答案 0 :(得分:2)
JTable
有一个数据模型(TableModel
),它可以保存值,也可以是实际数据的适配器。
可以通过更改表模型中的数据或设置新的表模型来更新表中的数据。
在您的情况下,您可以使用javax.swing.table.DefaultTableModel
:
TableModel tableModel=new DefaultTableModel(newData, tableHeadings);
tblBill.setModel(tableModel);
答案 1 :(得分:1)
当用户按下“添加项目”按钮时更新。
为什么在只添加单个项目时重新创建整个表格?这不是很有效。
而是必须向表中添加新行。此代码(如上面的代码所示)假设您使用的是DefaultTableModel:
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.addRow(...);