Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Недоскролл JTable в JScrollPane 
V
    Опции темы
Omar66
Дата 25.4.2008, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 25.4.2008

Репутация: нет
Всего: нет



Всем привет! 
Есть JTable в JScrollPane. Добавляю в конец таблицы строку. Надо чтоб таблица в скролле сдвинулась так, чтоб стала видна эта новая строка. Удалось этого добиться только повтором команды setViewPosition. После первой команды позиция устанавливается не та что указывается! smile  На 1 строку меньше чем надо происходит сдвиг. Точно тоже самое при использовании getViewport().scrollRectToVisible. 

В чём прикол? Или прокол  smile 

В меню жмите "Выполнить-добавить" 
В коде закоментирована повторная команда

Код

import javax.swing.table.*; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class ShowTable 

   public static void main(String[] args) 
   { 
      JFrame frame = new ShowTableFrame(); 
      frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 
      frame.setVisible( true ); 
   } 


class ShowTableFrame extends JFrame 

   public ShowTableFrame() 
   { 
      setSize( 200, 300 ); 
      setTitle("ShowTable"); 
      Container contentPane = getContentPane(); 
       
      myDataModel.getDataFromSource( 999, 2 ); 
      table = new JTable( myDataModel ); 
      scrollPane = new JScrollPane( table ); 

      contentPane.add( scrollPane ); 

      addMenu(); 
   } 

   private void addMenu() 
   { 
      JMenuBar menuBar = new JMenuBar(); 
      setJMenuBar( menuBar ); 

      JMenu actionMenu = new JMenu("Выполнить"); 
      menuBar.add( actionMenu ); 

      JMenuItem addRowItem = new JMenuItem("Добавить"); 
      actionMenu.add( addRowItem ); 

      addRowItem.addActionListener(new ActionListener() 
              { 
                      public void actionPerformed(ActionEvent event) 
                      { 
                              myDataModel.addRow(); 
               table.setRowSelectionInterval( table.getRowCount() - 1, table.getRowCount() - 1 ); 
               myDataModel.fireTableRowsInserted( table.getRowCount() - 1, table.getRowCount() - 1); 

               JViewport tblView = scrollPane.getViewport(); 
               Point p = new Point( 0, (int)( table.getRowHeight() * table.getRowCount() - tblView.getExtentSize().getHeight() ) ); 

               System.out.println( "setViewPosition:" + p ); 
               tblView.setViewPosition( p ); 
               System.out.println( "ViewPosition:" + tblView.getViewPosition() ); 

// тут раскомментировать чтоб стало хорошо :) 
//               tblView.setViewPosition( p ); 
//               System.out.println( "ViewPosition 2:" + tblView.getViewPosition() ); 


/* это др.вариант с тем же эффектом 
      Rectangle tableRect = table.getCellRect( table.getRowCount(), table.getColumnCount(), true ); 
      System.out.println( "tableRect:" + tableRect ); 

      scrollPane.getViewport().scrollRectToVisible( tableRect ); 
      scrollPane.getViewport().scrollRectToVisible( tableRect ); 
*/ 
                      } 
              } 
      ); 

      JMenuItem testItem = new JMenuItem("Test"); 
      actionMenu.add( testItem ); 
      testItem.addActionListener(new ActionListener() 
              { 
                      public void actionPerformed(ActionEvent event) 
                      { 
               System.out.println("table.getRowCount():" + table.getRowCount()); 
               System.out.println("ViewPosition:" + scrollPane.getViewport().getViewPosition() ); 
//               System.out.println("ExtentSize:" + scrollPane.getViewport().getExtentSize() ); 
                      } 
              } 
      ); 

   } 

   private ShowTableDataModel myDataModel = new ShowTableDataModel(); 
   private JTable table; 
   private JScrollPane scrollPane; 


class ShowTableDataModel extends AbstractTableModel 

   public void addRow() 
   { 
      this.numRows++; 
   } 

   public void getDataFromSource( int numRows, int numCols ) 
   { 
      this.numRows = numRows; 
      this.numCols = numCols; 
   } 

   public Object getValueAt( int r, int c ) 
   { 
      return ( r + 1 ) * ( c + 1 ); 
   } 

   public int getRowCount() 
   { 
      return numRows; 
   } 

   public int getColumnCount() 
   { 
      return numCols; 
   } 

   public String getColumnName( int c ) 
   { 
      return "Column_" + c; 
   } 

   private int numRows, numCols; 


java version "1.6.0" 
Java(TM) SE Runtime Environment (build 1.6.0-b105) 
Java HotSpot(TM) Client VM (build 1.6.0-b105, mixed mode) 



PM MAIL   Вверх
dorogoyIV
Дата 27.4.2008, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Код

      scrollPane.getViewport().scrollRectToVisible(new Rectangle(tableRect.x, tableRect.y, tableRect.width, tableRect.height + table.getRowHeight())); 

просто Rectangle имеет высоту 0

Это сообщение отредактировал(а) dorogoyIV - 27.4.2008, 10:09
PM MAIL   Вверх
Omar66
Дата 28.4.2008, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 25.4.2008

Репутация: нет
Всего: нет



Помогло smile Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0652 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.