通过单击JButton重新制作JTable

时间:2011-02-20 16:55:28

标签: java swing jtable tablemodel

我有一个9乘3(27个单元格)的JTable,但如果用户点击一个按钮,我希望表格更改,不仅要填充新数据,还要填充不同数量的单元格。我不知道该怎么做。

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

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

我想知道我怎么做

a)从面板中删除一个表格并将其“放回去”,形状不同 要么 b)改变表格的内容(和可能的形状)。

3 个答案:

答案 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来对其进行排序。