2013-05-14 19 views
1

我有以下代码的JTable:JTable中重装数据

String[] columnNames = {"Name", "Category", "Seller", "Sell Price", "Current Bid", "End Date", "Open"}; 
Object[][] data = GetAuctionTableData(); 
final JTable AuctionTable = new JTable(data, columnNames); 

我也有表单上的按钮,并希望将数据加载到表上的按钮的点击。我该怎么做呢?我需要使用AbstractTableModel吗?

编辑

下面是按钮的代码:

RefreshAuctionButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) 
    { 
     Object[][] data = GetAuctionTableData(); 
     AuctionTable = new JTable(data, columnNames); 
    }}); 

由于JTable被声明为final此代码不能正常工作。我现在把它作为final,因为它是从内部类(按钮,如上)访问的。

+0

为了尽快提供更好的帮助,请发布[SSCCE](http://sscce.org/)。 – 2013-05-14 03:03:21

+0

使用常见的Java案例约定。 – trashgod 2013-05-14 03:37:28

回答

0

使用DefaultTableModel并使用addRow(Object [] rowData)设置数据。您可以通过model.fireTableDataChanged()通知数据更改。

+0

'DefaultTableModel'隐式激发正确的事件;你不应该明确地这样做。 – trashgod 2013-05-14 03:36:21

1

这取决于您想要按钮更改关于表格的内容。

  • 如果按钮只是触发内data中的对象更新, 那么你只需要使用AuctionTable.update(或类似的东西)。

  • 如果它触发插入,那么只需添加 行即可直接插入AuctionTable。使用 ((DefaultTableModel) AuctionTable.getModel).addRow(...);

  • 如果它触发删除,那么只需删除 行的索引即可。使用((DefaultTableModel) AuctionTable.getModel).removeRow(...);

否则,我需要对按钮的操作的更多信息,或者你可以在每次按下按钮重新加载整个JTable中的信息(一些可能不会在理想的时间拨打电话给GetAuctionTableData()所有)。

编辑

要重新加载全部内容,同时保持final改性剂AuctionTable,在按钮的动作监听器使用setDataVector方法,而不是重新设置表。

RefreshAuctionButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) 
    { 
     Object[][] data = GetAuctionTableData(); 
     ((DefaultTableModel) AuctionTable.getModel()).setDataVector(data, columnNames); 
    } 
}); 

你必须设置你的columnNamesfinal为好,虽然。

+0

我想重新载入整个JTable的信息。如果JTable是最终的,我可以这样做吗? – user2351151 2013-05-14 03:48:13

+0

是的,你可以。 'final'关键字只是阻止您将其他对象分配给变量'AuctionTable',这在您当前的代码中不起作用。只需使用'DefaultTableModel'的'setDataVector'方法即可。将用代码更新我的答案。 – 2013-05-14 04:48:42

+0

我收到以下错误:javax.swing.JTable $ 1无法转换为javax.swing.table。DefaultTableModel 我是否正确地说我需要制作类型为DefaultTableModel的JTable? – user2351151 2013-05-14 05:13:58