Переделать JTable, нажав на JButton - PullRequest
1 голос
/ 20 февраля 2011

У меня есть JTable, который имеет размер 9 на 3 (27 ячеек), но если пользователь нажимает кнопку, я хочу, чтобы таблица менялась, заполняясь не только новыми данными, но, возможно, другим количеством ячеек. Я не уверен, как это сделать.

Я попытался удалить таблицу из родительского и создать новый экземпляр таблицы. Ничего не случилось. Здесь:

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

Я хочу знать, как я могу

а) удалите таблицу с панели и "вставьте ее обратно" другой формы или же б) изменить содержание (и, возможно, форму) таблицы.

Ответы [ 3 ]

2 голосов
/ 20 февраля 2011

Вы можете изменить TableModel существующей таблицы с помощью метода setModel (...).Используйте объект DefaultTableModel со вставленными в него интересующими данными и столбцами Strings (используйте конструктор, который принимает два параметра, одномерный массив Object и двумерный массив Object).

2 голосов
/ 20 февраля 2011

Единственное, чего не хватает в вашем примере, это вызвать 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);
}
0 голосов
/ 20 февраля 2011

Все нормально.Я отсортировал его, создав новую таблицу и установив для видимости старых таблиц значение false.

...