JTable重载数据

时间:2013-05-14 02:49:45

标签: java swing jtable reload

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

2 个答案:

答案 0 :(得分:1)

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

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

  • 如果它触发了插入,那么添加它会很有用 要直接插入AuctionTable的行。使用 ((DefaultTableModel) AuctionTable.getModel).addRow(...);

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

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

修改

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

setDataVector

但您也必须将RefreshAuctionButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Object[][] data = GetAuctionTableData(); ((DefaultTableModel) AuctionTable.getModel()).setDataVector(data, columnNames); } }); 设置为columnNames

答案 1 :(得分:0)

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

通知数据更改