当前位置: 首页 > 知识库问答 >
问题:

点击按钮更新JTable

浦琪
2023-03-14

我正在使用JTable和这里找到的自定义表模型。我已经用那篇文章中提供的建议更新了我的代码,遇到了一个新问题。我对代码所做的更改是注入<code>ArrayList

用于初始化< code>JTable的代码如下:

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

我用来更新< code>JTable的代码如下:

JButton btnRefreshAllPlayers = new JButton("Refresh");

btnRefreshAllPlayers.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent arg0) {

        PlayerTableModel model = (PlayerTableModel) table.getModel();
        model.fireTableDataChanged();

    }

});

我也尝试过使用重绘()但这也不起作用。截至目前,使JTable更新的唯一方法是关闭并重新打开程序。文件处理程序具有我用于JTable数组列表,随着用户添加更多玩家,其大小会增加。

为什么< code > fireTableDataChanged()检测不到任何更改?

共有1个答案

司徒宏远
2023-03-14

我在stackoverflow上搜索过,有几个人说过使用这种方法。

不,您不应该在表模型本身的上下文之外调用任何 fireTableXxx 方法,否则建议的人就错了,将来会给您带来问题。从代码的外观来看,没有任何变化。如果已根据上一个问题中提供的答案更新了 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设置一个新模型,它工作了,但没有保持我之前设置的表行宽度。

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

您可以遍历列模型,在应用模型并重新应用宽度之前,将列宽存储在列表地图

有没有更新JTable的合适方法?

您可以为<code>TableModel

public class PlayerTableModel extends AbstractTableModel {
    private final List<PlayerSummary.Player> summaries;

    public PlayerTableModel(List<PlayerSummary.Player> summaries) {
        this.summaries = new ArrayList<PlayerSummary.Player>(summaries);
    }
    // Other TabelModel methods...

    public void refresh() {
        summaries = new ArrayList<>(FileHandler.getCompletedPlayers());
        fireTableDataChanged();
    }
}

然后,您需要在< code>ActionListener中调用此方法...

PlayerTableModel model = (PlayerTableModel)table.getMode();
model.refresh();
 类似资料:
  • 问题内容: 我正在使用此处找到的自定义表格模型。我已经使用该帖子中提供的建议更新了我的代码,并遇到了一个新问题。我对我的代码所做的改变是一个注入到我,以避免与线程的问题。完成此操作后,通过按按钮更新我的表的代码已停止工作。 用于初始化的代码如下: 我用来更新的代码如下: 我也尝试过使用,但这也不起作用。截至目前,更新的唯一方法是关闭并重新打开程序。具有我正在使用的,随着用户添加更多玩家,尺寸会增加

  • 我正在尝试在React中构建我的第一个计算器。我的纽扣似乎有问题(我想)。在测试s时,我发现我第一次点击添加按钮不会更新所有setState。相反,第二次单击会正确更新它。 知道它为什么不起作用吗? 我有一个名为“DaInserting”的div,当用户点击任何数字键时会更新,然后当用户点击加法/减法/等时,应该更新,但它没有。它在第二次点击时更新:-检查。 当用户点击加法/减法后,DaInser

  • 问题内容: 可以更改按钮功能吗? 例如 点击,再点击一次 我已经尝试过类似,但没有结果。 我设法使叠加工作并在其中插入所需的数据。但是没有找到任何可以帮助我的帖子。我正在使用react-bootstrap。这是我的代码。 问题答案: 您可以尝试使用状态来存储颜色。也许这会让您想到解决问题的方法: 这是一个小提琴。

  • 目前,我在尝试用新信息更新我的JFrame时遇到了一个主要问题。我尝试了通常的无效、验证、重新绘制等。 以下是创建JFrame的主要代码: 这是用来切换JFrame的按钮代码:这是一个完全不同的类 现在您会注意到,在makeCenter方法的第一段代码中,注释掉了一些内容。如果我不评论它,信息会发生变化,但每次都会创建一个新窗口。 现在,尽管dispose()当前不在其中,但我将其放在makeCe

  • 我就是不能点击按钮进入下一页。目前为止我尝试了以下方法 编辑 关键是重新定位元素,重新加载。由于我在表单中单击,底层代码发生了变化。司机。通过xpath(//button[@type='submit'][@name='button'])查找元素。因此,click()无法找到元素。重新加载驱动程序后。get(“%s/%s:%s”%(str(sys.argv[4])、str(sys.argv[2])、

  • 我正在做一个计数计时器使用按钮开始和停止。 我需要帮助解决这个...当我按下“Start”按钮时,它可以工作(使用)但是不会为我更新。 但是,如果将放在而不是在settext会更新...但我没有按“开始”键。如何使setText在“开始”按钮被按下后更新?