Заполнение пустых таблиц в Java Swing - PullRequest
3 голосов
/ 25 января 2010

Я хотел бы иметь окно JFrame с начальной пустой таблицей, скажем, 10 столбцов. Событие действия, генерируемое щелчком мыши, должно затем заполнить таблицу списком из 10 или менее элементов, оставляя использованные строки таблицы пустыми. Как это сделать?

Ответы [ 3 ]

4 голосов
/ 25 января 2010

Я бы порекомендовал определить собственную реализацию TableModel путем создания подкласса AbstractTableModel. Таким образом, вы можете «поддержать» свою модель любой подходящей коллекцией (например, java.util.List). Когда запускается ActionEvent, вы обычно вносите изменения в базовую коллекцию, а затем запускаете TableModelEvent, чтобы вызвать перекрашивание JTable.

2 голосов
/ 25 января 2010

Для этого вам нужно создать DefaultTableModel с нужными вам данными, а для пустых строк заполнить таблицу объектов значениями null .

Проще с некоторым кодом:

Поскольку я не знаю, откуда берутся ваши данные, я предполагаю, что они получены из матрицы с менее чем 10 строками:

String data[][] = {{"a","b"}, {"c","d"}};

Вы должны создать новую матрицу с вашими предыдущими данными и ячейками null для заполнения таблицы. В конце концов у вас будет что-то вроде этого.

Object data2[][] = {{"a","b"}, 
{"c","d"}, 
{null,null}, 
{null,null}, 
{null,null}, 
{null,null}, 
{null,null}, 
{null,null}, 
{null,null}, 
{null,null}};

Таким образом, у вас будет матрица 10х2, которая заполнит вашу таблицу. Теперь вы можете обновить DefaultTableModel

yourTable.setModel(
        new DefaultTableModel(data2, new String [] {"Column1Title", "Cloumn2Title"}) {
        Class[] types = new Class[] {String.class,String.class}; 
        boolean[] canEdit = new boolean[] {true, true};
        @Override
        public Class getColumnClass(int columnIndex){ return types [columnIndex];}
        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex){ return canEdit [columnIndex];}
});

И это все. Полагаю, у вас нет проблем с созданием матрицы Object .

0 голосов
/ 25 января 2010

Помимо создания собственной TableModel, как объяснил Адамски, вы можете напрямую использовать javax.swing.table.DefaultTableModel .
Он имеет конструктор, который принимает количество столбцов и строк в качестве аргумента и методы для управления данными (addRow, insertRow, setDataAt, ...).

Я бы предпочел создать собственную TableModel, если это не для очень простой программы / функциональности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...