更新JTable的内容

时间:2013-11-04 10:53:19

标签: java swing jtable actionlistener

我有一个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搜索了一下,似乎找不到任何东西,想不出为什么没有其他人似乎陷入困境。 (也许我只是很厚)但希望这篇文章也会帮助其他人。

提前致谢:)

2 个答案:

答案 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(...);