Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.16.254] |
|
Сообщ.
#1
,
|
|
|
Есть таблица jTable1. Она определена в начале программы как табица из 24 строк и 6 столбцов:
Object[][] data = {{"...",...,"..."},{"...",...,"..."},...,{"...",...,"..."}}; Object[] columnnames = {"...","...","...","...","...","..."}; JTable jTable1 = JTable(data, columnnames); Есть myTableModel, определённая как DefaultTableModel myTableModel = (DefaultTableModel)jTable1.getModel(); С помощью функции myTableModel.insertRow() в таблицу вставляется новая строка, так, что реально число строк в таблице становится больше 24. Таблица помещена в ScrollPane. Но после этого добавления строк в таблицу при прокрутке в ScrollPane показываются всё равно только первые 24 строк таблицы. Как сделать, чтобы при прокрутке показывались все строки таблицы? |
Сообщ.
#2
,
|
|
|
После добавления данных в таблицу вызывай метод обновления данных fireTableDataChanged()
|
Сообщ.
#3
,
|
|
|
Цитата Alien @ После добавления данных в таблицу вызывай метод обновления данных fireTableDataChanged() При использовании DefaultTableModel заботиться об уведомлении таблицы не нужно. erslgoeirjh, код в студию. |
Сообщ.
#4
,
|
|
|
Цитата wind @ При использовании DefaultTableModel заботиться об уведомлении таблицы не нужно. erslgoeirjh, код в студию. На самом деле у меня вместо DefaultTableModel используется некая MyTableModel, являющаяся потомком DefaultTableModel. В ней я переопределил метод isCellEditable. Вот код: MyTableModel myTM; jTable1.setModel(myTM); //... int rowscount = myTM.getRowsCount(); int currow = 0; InputStream fileIn = FileInputStream(filename); // filename -- некоторое имя файла byte buff = new byte[79]; while (fileIn.read(buff)!=-1) { if (currow>=rowscount) { Object obj = {"","","","","",""}; myTM.insertRow(currow, obj); rowscount = myTM.getRowCount(); } s = new String(buff); // обработка строки s myTM.setValueAt(s1, currow, 2); // s1 -- некоторая подстрока из строки s // ... currow++; } Метод fireTableDataChanged() не помогает. |
Сообщ.
#5
,
|
|
|
Цитата erslgoeirjh @ На самом деле у меня вместо DefaultTableModel используется некая MyTableModel, являющаяся потомком DefaultTableModel. В ней я переопределил метод isCellEditable. при использовании конструктора a-la: JTable jTable1 = JTable(data, columnnames); создается объект DefaultTableModel Я немного не понимаю, как тогда все работает Можно выложить весь код? |
Сообщ.
#6
,
|
|
|
Цитата Grab[SSAU] @ Можно выложить весь код? Если кода очень много, прикрепите его к сообщению в виде архива. |
Сообщ.
#7
,
|
|
|
erslgoeirjh, ты изменяешь количество строк в модели. После того, как добавил строку методом myTM.setRowCount(...) укажи, сколько стало строк в модели.
А вообще, лучше бы запихнул данные в конструктор DefaultTableModel и это добавил в таблицу. Потом спокойно себе добавляешь и тд. Object[][] data = {{"1", "2"}}; Object[] column = {"3", "4"}; DefaultTableModel d = new DefaultTableModel(data, column); JTable table = new JTable(d); JScrollPane sp = new JScrollPane(table); Object[] dat = {"3", "4"}; d.insertRow(1, dat); add(sp); |
Сообщ.
#8
,
|
|
|
Проблема решена!
У JTable есть свойство preferredSize и есть соответствующие функции getPreferredSIze и setPreferredSize. Их и надо использовать для задания количества строк, которые прокручиваются JScrollPane-ом. Строке в таблице у меня соответствуют 16 пикселей. |