我有一个9乘3(27个单元格)的JTable,但如果用户点击一个按钮,我希望表格更改,不仅要填充新数据,还要填充不同数量的单元格。我不知道该怎么做。
我尝试从父项中删除表并创建表的新实例。没啥事儿。这里:
somepanel.remove(thetable);
JTable newtable = new JTable(datainavector,columntitles);
我想知道我怎么做
a)从面板中删除一个表格并将其“放回去”,形状不同 要么 b)改变表格的内容(和可能的形状)。
答案 0 :(得分:2)
您可能希望通过setModel(...)方法更改现有表的TableModel。使用一个DefaultTableModel对象,其中包含感兴趣的数据和插入的列Strings(使用带有两个参数的构造函数,一个Object的一维数组和一个Object的二维数组)。
答案 1 :(得分:2)
您的示例中唯一缺少的是致电invalidate()
和repaint()
,但我建议更改表格型号:
public static void main(String[] args) throws Exception {
JFrame frame = new JFrame("Test");
final JTable table = new JTable(generateRandomTableModel());
frame.add(new JScrollPane(table));
frame.add(new JButton(new AbstractAction("Change data") {
@Override
public void actionPerformed(ActionEvent e) {
table.setModel(generateRandomTableModel());
}
}), BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setVisible(true);
}
public static TableModel generateRandomTableModel() {
Random r = new Random();
String[][] data = new String[r.nextInt(10) + 1][r.nextInt(10) + 1];
String[] colNames = new String[data[0].length];
for (int i = 0; i < data[0].length; i++) {
colNames[i] = "" + r.nextInt(100);
for (int j = 0; j < data.length; j++)
data[j][i] = "" + r.nextInt(1000);
}
return new DefaultTableModel(data, colNames);
}
答案 2 :(得分:0)
没关系。我通过创建新表并将旧表可见性设置为false来对其进行排序。