我创建了自己的名为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"});
}
不幸的是,这以这样的混乱结束:
据此,我认为我的课程通过是完全错误的。
我期望得到的是这个(添加行之后):
如果有人可以启发我这样做,我将非常高兴,我想了解这一点。
最佳答案
如果您看一下TableModel
,它有两个方法,分别是getColumnName
和getColumnClass
,现在您已经覆盖了getColumnClass
,但在DefaultTableModel
内部,它使用了您使用的列名提供给构造函数,并在调用getColumnName
get时返回它们。
该数组还定义了getColumnCount
的返回值。
因此,当调用JTable#setModel
时,它将做的一件事(默认情况下)是调用它的createDefaultColumnsFromModel
方法,然后使用TableModel
来构建它的TableColumnModel
,并使用TableModel#getColumnName
方法来提供TableColumn
的headerValue
属性。
魔法!