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の1次元配列とObjectの2次元配列の2つのパラメーターを受け取るコンストラクターを使用します)。

于 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 に答える