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

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


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

我正在运行类似的东西,但是当前的实现是从Eclipse AWT(窗口生成器)中产生的,您还可以在其中使用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;
    }


它可能根本就不是一个DefaultTableModel,它只是从一个方法内部创建的一个..."Fertig"}) {,并且返回+完全模糊了(至少对我来说是:))。

虽然可以正常工作,但我不确定它是如何工作的,但据我了解,它会将空对象数组(2D)以及String数组传递给DefaultTableModel的构造函数,到目前为止,这是可以理解的(空数据+列名)根据DefaultTableModel的构造函数的要求。但是我不明白在之后如何将列类传递给构造函数,因为两个必需的参数(数据+列名)都已经传递了。

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

   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"});
    }


不幸的是,这以这样的混乱结束:
java - 用列名和列类初始化“空” DefaultTableModel-LMLPHP

据此,我认为我的课程通过是完全错误的。

我期望得到的是这个(添加行之后):
java - 用列名和列类初始化“空” DefaultTableModel-LMLPHP

如果有人可以启发我这样做,我将非常高兴,我想了解这一点。

最佳答案

如果您看一下TableModel,它有两个方法,分别是getColumnNamegetColumnClass,现在您已经覆盖了getColumnClass,但在DefaultTableModel内部,它使用了您使用的列名提供给构造函数,并在调用getColumnName get时返回它们。

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

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

魔法!

10-08 00:16