gpt4 book ai didi

java - 使用列名和列类初始化 "empty"DefaultTableModel

转载 作者:行者123 更新时间:2023-12-01 10:21:28 25 4
gpt4 key购买 nike

我创建了自己的类,名为 CustomTableModel,它从 DefaultTableModel 扩展而来。

public class CustomTableModel extends DefaultTableModel {/*[...]*/}

我的计划是,当您使用 new CustomTableModel(); 调用我的构造函数时,您将获得一个使用列名称和列类预初始化的新 CustomTableModel

我运行了类似的东西,但当前的实现曾经来自 Eclipse AWT(Window Builder),您还可以使用 GUI 来设置 TableModel。当前的实现如下所示:

public static DefaultTableModel createEmptyModel() {
model = new DefaultTableModel(new Object[][]{},
new String[]{"Lfd. Nr.", "FB Nr.", "Auftr. / Meld. Nr.", "Betra Nr.", "Datum", "Bahnhof", "Str. Km.",
"Sprz.", "Arb. Zeit", "Mitarbeiter", "Auftrag / Objekt(e)", "Anmerkungen", "Fertig"}) {

@SuppressWarnings("rawtypes")
Class[] columnTypes = new Class[]{Integer.class, String.class, String.class, String.class, String.class,
String.class, String.class, String.class, String.class, String.class, String.class, String.class, Boolean.class};

@SuppressWarnings({"unchecked", "rawtypes"})
public Class getColumnClass(int columnIndex) {
return columnTypes[columnIndex];
}
};
return model;
}

因为它可能有效,所以它根本不是一个CustomTableModel,它只是一个从方法内创建的DefaultTableModel,并返回+完全混淆(至少对我来说: ))。

虽然它有效,但我不确定它到底是如何工作的,据我了解,它会将一个空对象数组(2D)以及一个字符串数组传递给 DefaultTableModel 的构造函数,到目前为止这是可以理解的(空数据 +列名称)根据 DefaultTableModel 构造函数的要求。 但是我不明白如何在 ..."Fertig"}) { 之后将列类传递给构造函数,因为两个所需的参数(数据+列名称)都有已经被忽略了。

我最好的猜测是这种方法:

   public CustomTableModel() {
super(new Object[][]{{},{Integer.class, String.class, String.class, String.class, String.class,
String.class, String.class, String.class, String.class, String.class, String.class, String.class, Boolean.class}}, new String[]{"Lfd. Nr.", "FB Nr.", "Auftr. / Meld. Nr.", "Betra Nr.", "Datum", "Bahnhof", "Str. Km.",
"Sprz.", "Arb. Zeit", "Mitarbeiter", "Auftrag / Objekt(e)", "Anmerkungen", "Fertig"});
}

不幸的是,这会以这样的困惑结束: Wrong outcome, Classes are not passed over right

由此我认为我的类(class)通过是完全错误的。

我期望得到的是这样的(添加行后): Result with "old" implementation from Eclipse AWT

如果有人能启发我如何做到这一点,我会非常高兴,我想理解这一点。

最佳答案

如果你看一下 TableModel ,它有两个方法,getColumnNamegetColumnClass,现在,您已经重写了 getColumnClass,这很好,但在 DefaultTableModel 内部,它使用您提供给构造函数的列名称,并在调用 getColumnName get 时返回它们。

此数组还定义了 getColumnCount 的返回值。

因此,当调用 JTable#setModel 时,它要做的一件事(默认情况下)是调用它的 createDefaultColumnsFromModel 方法,然后使用 TableModel 构建其 TableColumnModel,使用 TableModel#getColumnName 方法提供 TableColumnheaderValue属性(property)。

魔法!

关于java - 使用列名和列类初始化 "empty"DefaultTableModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35579379/

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