0

我有一个显示 Object[][] 数据的 JTable。同一屏幕上还有一个表单,允许用户将项目添加到列表中的对象。虽然在我的一生中,当用户按下“添加项目”按钮时,我无法让表中显示的列表更新。

(它可以很好地附加到数组中,我可以将它打印到屏幕上,只是无法更改表格。)

这是桌子的装箱

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

从上面的代码来看,我确实没有做太多的努力,但实际上我已经尝试了几个小时,尝试使用不同的方法、数据结构并且没有找到可以直接返回的地方开始了,那就是上面的代码吧。

我在谷歌上搜索了一下,似乎找不到任何东西,想不出为什么没有其他人似乎被困在这个问题上。(也许我只是厚脸皮)但希望这篇文章也能帮助其他人。

提前致谢 :)

4

2 回答 2

2

JTable一个数据模型 ( TableModel),它要么保存值,要么是实际数据的适配器。

可以通过更改表模型中的数据或设置新的表模型来更新表中的数据。

在您的情况下,您可以使用javax.swing.table.DefaultTableModel

TableModel tableModel=new DefaultTableModel(newData, tableHeadings);
tblBill.setModel(tableModel);
于 2013-11-04T11:01:21.000 回答
1

当用户按下“添加项目”按钮时更新。

当您只添加一个项目时,为什么要重新创建整个表?那不是很有效。

而是必须向表中添加新行。此代码(如上面的代码)假设您使用的是 DefaultTableModel:

DefaultTableModel model = (DefaultTableModel)table.getModel();
model.addRow(...);
于 2013-11-04T15:45:36.980 回答