【问题标题】:JTable reload dataJTable 重新加载数据
【发布时间】:2013-05-08 05:05:01
【问题描述】:

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

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE
  • 使用常见的 Java 大小写约定。

标签: java swing jtable reload


【解决方案1】:

这取决于您希望按钮对表格进行哪些更改。

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

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

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

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

编辑

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

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

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

【讨论】:

  • 我想重新加载整个 JTable 的信息。如果 JTable 是最终的,我可以这样做吗?
  • 是的,你可以。 final 关键字只是阻止您将其他对象分配给变量AuctionTable,这在您当前的代码中不起作用。只需使用DefaultTableModelsetDataVector 方法。将使用代码更新我的答案。
  • 我收到以下错误:javax.swing.JTable$1 无法转换为 javax.swing.table.DefaultTableModel 我是否正确地说我需要创建 DefaultTableModel 类型的 JTable?跨度>
  • 错字:AuctionTable.getModel 应该是AuctionTable.getModel()。也许这就是问题所在。
  • 我看到错字了,已经修复了,还是出现上面的错误。
【解决方案2】:

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

【讨论】:

  • DefaultTableModel 隐式触发正确的事件;您不必明确地这样做。
猜你喜欢
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 2013-12-29
  • 2011-09-11
  • 2023-03-31
  • 2011-11-07
相关资源
最近更新 更多