[英]Initialize “empty” DefaultTableModel with column names and column classes
我創建了自己的名為CustomTableModel
的類,該類從DefaultTableModel擴展而來。
public class CustomTableModel extends DefaultTableModel {/*[...]*/}
我的計划是,當您使用new CustomTableModel();
調用構造函數時new 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;
}
由於它可能根本就不是CustomTableModel
,它只是從方法內部創建的DefaultTableModel
,並且返回+完全模糊了(至少對我來說是這樣))。
雖然工作正常,但我不確定它是如何工作的,但據我了解,它將空的對象數組(2D)以及String數組傳遞給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"});
}
據此,我認為我的課程通過是完全錯誤的。
如果有人可以啟發我這樣做,我將非常高興,我想了解這一點。
如果您看一下TableModel
,它有兩個方法getColumnName
和getColumnClass
,現在您已經覆蓋了getColumnClass
,這是找到的,但是在DefaultTableModel
內部,它使用提供給構造函數的列名,並在getColumnName
得到叫。
此數組還定義了getColumnCount
的返回值。
因此,當調用JTable#setModel
時,它將做的一件事(默認情況下)是調用它的createDefaultColumnsFromModel
方法,然后使用TableModel
來構建它的TableColumnModel
,並使用TableModel#getColumnName
方法提供TableColumn
的headerValue
屬性。
魔法!
但是我不明白如何在...“ Fertig”})之后將列類傳遞給構造函數,因為兩個必需的參數(數據+列名)都已經傳遞了。
它們不會傳遞給構造函數,而是在匿名類中初始化。
您最后發布的代碼看起來也有些奇怪,可能無法按預期工作。
我可能不會擴展DefaultTableModel
因為它可能仍然需要重寫許多方法,而是擴展AbstractTableModel
並實現缺少的方法以及需要重寫的方法(應該不多)。
然后,我可能會傳遞一個包含名稱和類的數組(您可以在此處使用vargs)或ColumnDefinition
(或其他名稱)對象的集合,例如:
TableModel tm = new CustomTableModel( new ColumnDefinition("Lfd. Nr.", Integer.class),
new ColumnDefinition("FB Nr.", String.class), ...)
構造函數如下所示:
public CustomTableModel(ColumnDefinition... columns) { ... }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.