jtabel 遍历_单击按钮更新JTable

小编典典

我在stackoverflow上进行了搜索,有几个人说要使用该方法。

不,您不应fireTableXxx在TableModel自身的上下文之外调用任何方法,否则人们会认为这完全是错误的,将来会给您带来麻烦。从代码的外观来看,没有任何变化。如果您已TableModel根据上一个问题中提供的答案更新了,则与模型中与外部源的数据无关。您需要从外部源手动重新加载数据,创建新数据TableModel并将其应用于表

例如…

JButton btnRefreshAllPlayers = new JButton("Refresh");

btnRefreshAllPlayers.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent arg0) {

TableModel model = new PlayerTableModel(FileHandler.getCompletedPlayers());

table.setModel(model);

}

});

我也尝试过使用更新后的ArrayList设置新模型,它可以工作,但没有保持我先前设置的表行宽度。

对于表来说这是合理的事情,因为它不知道新模型是否具有与旧模型相同的属性/列,因此将其重置。

您可以遍历ColumnModel,在应用模型并重新应用宽度之前将列的宽度存储在中List或Map

有没有更新JTable的正确方法?

您可以提供TableModel一种刷新方法,该方法可以加载数据本身并触发tableDataChanged事件

public class PlayerTableModel extends AbstractTableModel {

private final List summaries;

public PlayerTableModel(List summaries) {

this.summaries = new ArrayList(summaries);

}

// Other TabelModel methods...

public void refresh() {

summaries = new ArrayList<>(FileHandler.getCompletedPlayers());

fireTableDataChanged();

}

}

然后,您需要在自己的计算机中调用此方法ActionListener。

PlayerTableModel model = (PlayerTableModel)table.getMode();

model.refresh();

2020-11-26

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值