1

我在代码中有以下 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。我目前将它作为最终的,因为它是从内部类(按钮,如上)访问的。

4

2 回答 2

1

这取决于您希望按钮更改有关表格的内容。

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

  • 如果它触发了插入,那么只将要插入的行直接添加到AuctionTable. 利用 ((DefaultTableModel) AuctionTable.getModel).addRow(...);

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

否则,我将需要有关按钮操作的更多信息,或者您可以在GetAuctionTableData()每次按下按钮时调用以重新加载整个 JTable 的信息(这可能根本不需要)。

编辑

final要在保留修饰符的同时重新加载全部内容AuctionTable,请使用该setDataVector方法而不是在按钮的动作侦听器中重新设置表格。

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

不过,您也必须将其设置columnNamesfinal

于 2013-05-14T03:14:26.950 回答
0

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

于 2013-05-14T03:05:24.767 回答