Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Java > Проблема с выводом строк таблицы |
Автор: erslgoeirjh 09.11.07, 10:13 |
Есть таблица jTable1. Она определена в начале программы как табица из 24 строк и 6 столбцов: Object[][] data = {{"...",...,"..."},{"...",...,"..."},...,{"...",...,"..."}}; Object[] columnnames = {"...","...","...","...","...","..."}; JTable jTable1 = JTable(data, columnnames); Есть myTableModel, определённая как DefaultTableModel myTableModel = (DefaultTableModel)jTable1.getModel(); С помощью функции myTableModel.insertRow() в таблицу вставляется новая строка, так, что реально число строк в таблице становится больше 24. Таблица помещена в ScrollPane. Но после этого добавления строк в таблицу при прокрутке в ScrollPane показываются всё равно только первые 24 строк таблицы. Как сделать, чтобы при прокрутке показывались все строки таблицы? |
Автор: Alien 09.11.07, 11:04 |
После добавления данных в таблицу вызывай метод обновления данных fireTableDataChanged() |
Автор: wind 09.11.07, 11:31 |
Цитата Alien @ После добавления данных в таблицу вызывай метод обновления данных fireTableDataChanged() При использовании DefaultTableModel заботиться об уведомлении таблицы не нужно. erslgoeirjh, код в студию. |
Автор: erslgoeirjh 09.11.07, 12:32 |
Цитата wind @ При использовании DefaultTableModel заботиться об уведомлении таблицы не нужно. erslgoeirjh, код в студию. На самом деле у меня вместо DefaultTableModel используется некая MyTableModel, являющаяся потомком DefaultTableModel. В ней я переопределил метод isCellEditable. Вот код: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 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() не помогает. |
Автор: Grab[SSAU] 09.11.07, 12:36 |
Цитата erslgoeirjh @ На самом деле у меня вместо DefaultTableModel используется некая MyTableModel, являющаяся потомком DefaultTableModel. В ней я переопределил метод isCellEditable. при использовании конструктора a-la: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> JTable jTable1 = JTable(data, columnnames); создается объект <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> .DefaultTableModel Я немного не понимаю, как тогда все работает Можно выложить весь код? |
Автор: wind 09.11.07, 13:26 |
Если кода очень много, прикрепите его к сообщению в виде архива. |
Автор: Alien 09.11.07, 13:51 |
erslgoeirjh, ты изменяешь количество строк в модели. После того, как добавил строку методом myTM.setRowCount(...) укажи, сколько стало строк в модели. А вообще, лучше бы запихнул данные в конструктор DefaultTableModel и это добавил в таблицу. Потом спокойно себе добавляешь и тд. <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 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); |
Автор: erslgoeirjh 15.11.07, 08:54 |
Проблема решена! У JTable есть свойство preferredSize и есть соответствующие функции getPreferredSIze и setPreferredSize. Их и надо использовать для задания количества строк, которые прокручиваются JScrollPane-ом. Строке в таблице у меня соответствуют 16 пикселей. |