gpt4 book ai didi

java - 使用自定义渲染器初始化动态 JTable 的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-02 04:16:14 26 4
gpt4 key购买 nike

目前,我在 JPanel 中初始化我的 JTable,如下所示:

private ArrayData data;
private JTable table;
private CustomTableModel model;

public ExtendedJPanel() {
data = ArrayData.getData();

model = new CustomTableModel(data);
table = new JTable(model);

TableColumn col = table.getColumnModel().getColumn(0);
col.setCellRenderer(new Column0Renderer());
col = table.getColumnModel().getColumn(1);
col.setCellRenderer(new Column1Renderer());

// do some other stuff
}

当我想修改JTable中的所有值

我通过创建一个新的 Object[][] 数组并为所有对象调用 fireTableCellUpdated(row, column) 直接与 TableModel 交互我的细胞。

我的问题是,在程序中的某个时刻,我的 JTable 丢失了其自定义渲染器。

有人告诉我这是因为它正在更新 TableColumnModel

初始化 JTable 以使 CellRenderers 保持不变的最佳方法是什么在 JTable 的整个生命周期中保持不变?

最佳答案

When I want to modify all the values in the table, I interact with the TableModel directly by creating a new Object[][] array and calling fireTableCellUpdated(row, column) for all my cells.

不,您绝对不应该直接调用 fireTableCellUpdated(...)。这就是 TableModel 的工作。对数据的更改应该通过 TableModel 完成,而不是像数组这样的外部数据存储。

如果要更改表中的数据,请使用 TableModel 的 setValueAt(...) 方法。

您始终可以向自定义 TableModel 添加一个 clear(...) 方法来重置内部数据。

What's the best way to initialise a JTable such that the CellRenderers stay constant throughout the life of the JTable?

取决于您所说的初始化的含义。使用 DefaultTableModel 时,您可以只使用:

model.setRowCount(0);

并且所有数据都被删除。

然后就可以使用addRows(...)方法动态添加数据。

My problem is that, at some point in my program, my JTable loses its custom renderers. I've been told that this is because it is updating the TableColumnModel.

是的,每当您执行以下操作时:

table.setModel(...);

创建了一个新的 TableColumnModel,并且您丢失了自定义渲染。使用我上面的建议这不会有问题,因为您没有更改表的“结构”(只是删除了数据),因此不需要重新创建 TableColumnModel。

关于java - 使用自定义渲染器初始化动态 JTable 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33285347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com