Как установить строки и столбцы JTable Dynamic

мой вопрос: как установить динамическое количество строк и столбцов в JTable? Я имею в виду, что если пользователь хочет создать таблицу из 2 строк и 2 столбцов, он просто набирает число. Как я могу это сделать, я пробовал с DefaultModel безуспешно.

Я буду признателен за любую помощь.

Спасибо


person Lalo Galicia    schedule 17.11.2014    source источник
comment
Вы имеете в виду "зубчатый" стол? Например, пользователю разрешена одна строка с 3 столбцами и другая строка с 4 столбцами? Или у вас просто проблемы с добавлением строк в таблицу?   -  person Radiodef    schedule 18.11.2014
comment
Опубликуйте код, который вы пробовали.   -  person alterfox    schedule 18.11.2014
comment
TableModel это решение...   -  person MadProgrammer    schedule 18.11.2014
comment
У меня проблемы с добавлением строк, позвольте мне попробовать одну вещь, и если это не сработает, я опубликую код, спасибо, ребята, за ваш быстрый ответ.   -  person Lalo Galicia    schedule 18.11.2014


Ответы (1)


DefaultTableModel имеет два способа определения количества строк/столбцов во время выполнения.

Ты мог...

Просто создайте новый DefaultTableModel, передав ему нужные строки и столбцы...

DefaultTableModel model = new DefaultTableModel(rows, cols);

а затем примените это к JTable. Это, очевидно, заменит существующую табличную модель, а это означает, что вы потеряете все ее данные.

Ты мог...

Создайте мастер DefaultTableModel и примените его к JTable и просто используйте

model.setRowCount(rows);
model.setColumnCount(cols);

для динамического обновления количества строк и столбцов по мере необходимости. Это позволит вам сохранить данные в модели таблицы (ожидайте, что когда вы удалите строки или столбцы, они будут потеряны).

Запускаемый пример

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.SpinnerNumberModel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private JTable table;
        private DefaultTableModel model;
        private JSpinner fldRows;
        private JSpinner fldColumns;

        public TestPane() {

            setLayout(new BorderLayout());

            fldRows = new JSpinner(new SpinnerNumberModel(1, 1, 999999, 1));
            fldColumns = new JSpinner(new SpinnerNumberModel(1, 1, 999999, 1));

            JPanel options = new JPanel(new GridBagLayout());
            options.add(new JLabel("Rows: "));
            options.add(fldRows);
            options.add(new JLabel("Columns: "));
            options.add(fldColumns);

            JButton update = new JButton("Update");
            options.add(update);

            update.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    int rows = (int) fldRows.getValue();
                    int cols = (int) fldColumns.getValue();

                    // Dynamic master model...
//                  model.setRowCount(rows);
//                  model.setColumnCount(cols);

                    // Replace model
                    table.setModel(new DefaultTableModel(rows, cols));
                }
            });

            model = new DefaultTableModel();
            table = new JTable();
            add(new JScrollPane(table));
            add(options, BorderLayout.NORTH);

        }

    }

}

Подробнее см....

person MadProgrammer    schedule 17.11.2014