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