我在代码中有以下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()
(这可能根本不希望这样做)。
编辑
要在保留final
的AuctionTable
修饰符的同时重新加载全部内容,请使用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/