我创建的DefaultTableModel
模型未在我的GUI
中显示。它只显示为黑线。需要了解原因?
感谢您的帮助。
DefaultTableModel
的代码是:
public class MyTableModel {
public static DefaultTableModel model = new DefaultTableModel();
public MyTableModel() {
model.addColumn("Col1");
model.addColumn("Col2");
model.addColumn("Col2");
model.addColumn("Col2");
model.addColumn("Col2");
model.addColumn("Col2");
model.addRow(new Object[] { "Hammer", "5", "1000", "Werkzeug",
new Boolean(false), "Ein schöner Hammer" });
model.addRow(new Object[] { "Computer", "2", "100000", "Elektronik",
new Boolean(true), "Ein schöner Computer" });
model.addRow(new Object[] { "Smartphone", "12", "10000", "Elektronik",
new Boolean(false), "Ein schönes Smartphone" });
model.addRow(new Object[] { "Hose", "6", "4000", "Kleidung",
new Boolean(true), "Eine schöne Höse" });
model.addRow(new Object[] { "Geschichtsbuch", "7", "1000", "Bücher",
new Boolean(false), "Ein schönes Buch" });
}
}
这是GUI的一部分,我实现了模型(如果我使用AbstractTableModel
,它可以工作):
JTable table = new JTable(MyTableModel.model);
JScrollPane scrollTable = new JScrollPane(table,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
GridBagConstraints gbc_Table = new GridBagConstraints();
gbc_Table.insets = new Insets(0, 10, 5, 5);
gbc_Table.gridx = 0;
gbc_Table.gridy = 1;
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
Dimension d = table.getPreferredSize();
d.width = 500;
table.setPreferredScrollableViewportSize(d);
contentPanel.add(scrollTable, gbc_Table);
答案 0 :(得分:0)
MyTableModel.model
为空。它只在你调用MyTableModel的构造函数时才会填充,而你永远不会这样做。使用静态非最终字段是不好的做法。让它们公开更糟糕。从构造函数初始化静态字段更糟糕。
将班级更改为
public class MyTableModelFactory {
public static DefaultTableModel create() {
DefaultTableModel model = new DefaultTableModel();
model.addColumn("Col1");
model.addColumn("Col2");
model.addColumn("Col2");
model.addColumn("Col2");
model.addColumn("Col2");
model.addColumn("Col2");
model.addRow(new Object[] { "Hammer", "5", "1000", "Werkzeug",
new Boolean(false), "Ein schöner Hammer" });
model.addRow(new Object[] { "Computer", "2", "100000", "Elektronik",
new Boolean(true), "Ein schöner Computer" });
model.addRow(new Object[] { "Smartphone", "12", "10000", "Elektronik",
new Boolean(false), "Ein schönes Smartphone" });
model.addRow(new Object[] { "Hose", "6", "4000", "Kleidung",
new Boolean(true), "Eine schöne Höse" });
model.addRow(new Object[] { "Geschichtsbuch", "7", "1000", "Bücher",
new Boolean(false), "Ein schönes Buch" });
}
}
并将其用作
JTable table = new JTable(MyTableModelFactory.create());
答案 1 :(得分:0)
嗯,问题是MyTableModel的构造函数永远不会被执行,所以它不会填充DefaultTableModel。
我建议你在MyTableModel中添加一个方法来添加你需要的数据。
public static void initialize(){
model.addColumn("Col1");
...
new Boolean(false), "Ein schönes Buch" });
}
因此,您可以在创建JTable之前初始化模型
TableModelControl.initialize();
JTable table = new JTable(TableModelControl.model);
此外,我不是Lists,Tables等公共静态模型的忠实粉丝。我建议将来不要这样做。