1

我有一个 9 x 3(27 个单元格)的 JTable,但是如果用户单击一个按钮,我希望表格发生变化,不仅填充新数据,而且可能填充不同数量的单元格。我不知道该怎么做。

我尝试从父级中删除表并创建表的新实例。没啥事儿。这里:

somepanel.remove(thetable);
JTable newtable = new JTable(datainavector,columntitles);

我想知道我该怎么做

a)从面板中删除一个表格并以不同的形状“放回”或b)更改表格的内容(可能还有形状)。

4

3 回答 3

2

您可能希望通过 setModel(...) 方法更改现有表的 TableModel。使用 DefaultTableModel 对象,其中插入了感兴趣的数据和列字符串(使用带有两个参数的构造函数,一个 Object 的一维数组和一个 Object 的二维数组)。

于 2011-02-20T17:07:16.700 回答
1

您的示例中唯一缺少的是调用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);
}
于 2011-02-20T17:17:54.223 回答
0

没关系。我通过创建新表并将旧表的可见性设置为 false 对其进行了排序。

于 2011-02-20T17:05:59.483 回答