我在代码中有以下JTable:

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


我在表单上还有一个Button,希望单击该按钮将数据重新加载到表中。我该怎么做呢?我需要使用AbstractTableModel吗?

编辑

这是按钮的代码:

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


该代码无效,因为JTable被声明为final。我目前将其作为最终版本,因为它是从内部类(按钮,如上所述)访问的。

最佳答案

这取决于您要在表上更改按钮的内容。


如果该按钮仅触发data中对象的更新,
那么您只需要使用AuctionTable.update(或类似的东西)。
如果触发插入,则仅添加
直接插入到AuctionTable的行。采用
((DefaultTableModel) AuctionTable.getModel).addRow(...);
如果触发删除操作,则只需要
要删除的行。使用((DefaultTableModel)AuctionTable.getModel).removeRow(...);


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

编辑

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

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


不过,您还必须将columnNames设置为final

关于java - JTable重载数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16534332/

10-10 04:59