На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Проблема с выводом строк таблицы
    Есть таблица jTable1. Она определена в начале программы как табица из 24 строк и 6 столбцов:
    Object[][] data = {{"...",...,"..."},{"...",...,"..."},...,{"...",...,"..."}};
    Object[] columnnames = {"...","...","...","...","...","..."};
    JTable jTable1 = JTable(data, columnnames);
    Есть myTableModel, определённая как
    DefaultTableModel myTableModel = (DefaultTableModel)jTable1.getModel();
    С помощью функции myTableModel.insertRow() в таблицу вставляется новая строка, так, что реально число строк в таблице становится больше 24. Таблица помещена в ScrollPane.

    Но после этого добавления строк в таблицу при прокрутке в ScrollPane показываются всё равно только первые 24 строк таблицы. Как сделать, чтобы при прокрутке показывались все строки таблицы?
      После добавления данных в таблицу вызывай метод обновления данных fireTableDataChanged()
        Цитата Alien @
        После добавления данных в таблицу вызывай метод обновления данных fireTableDataChanged()

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

        erslgoeirjh, код в студию.
          Цитата wind @
          При использовании DefaultTableModel заботиться об уведомлении таблицы не нужно.

          erslgoeirjh, код в студию.

          На самом деле у меня вместо DefaultTableModel используется некая MyTableModel, являющаяся потомком DefaultTableModel. В ней я переопределил метод isCellEditable.

          Вот код:

          ExpandedWrap disabled
            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() не помогает.
            Цитата erslgoeirjh @
            На самом деле у меня вместо DefaultTableModel используется некая MyTableModel, являющаяся потомком DefaultTableModel. В ней я переопределил метод isCellEditable.


            при использовании конструктора a-la:

            ExpandedWrap disabled
              JTable jTable1 = JTable(data, columnnames);


            создается объект
            ExpandedWrap disabled
              DefaultTableModel
            .

            Я немного не понимаю, как тогда все работает ;) Можно выложить весь код?
              Цитата Grab[SSAU] @
              Можно выложить весь код?

              Если кода очень много, прикрепите его к сообщению в виде архива.
                erslgoeirjh, ты изменяешь количество строк в модели. После того, как добавил строку методом myTM.setRowCount(...) укажи, сколько стало строк в модели.

                А вообще, лучше бы запихнул данные в конструктор DefaultTableModel и это добавил в таблицу. Потом спокойно себе добавляешь и тд.
                ExpandedWrap disabled
                  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);
                Сообщение отредактировано: Alien -
                  Проблема решена!

                  У JTable есть свойство preferredSize и есть соответствующие функции getPreferredSIze и setPreferredSize. Их и надо использовать для задания количества строк, которые прокручиваются JScrollPane-ом. Строке в таблице у меня соответствуют 16 пикселей.
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0296 ]   [ 15 queries used ]   [ Generated: 4.05.24, 23:05 GMT ]