Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

java. JTable в JScrollPane

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Omar66



Зарегистрирован: 23.04.2008
Сообщения: 1

СообщениеДобавлено: Ср Апр 23 2008 05:10    Заголовок сообщения: java. JTable в JScrollPane Ответить с цитатой

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

В чём прикол?

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)

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

Код:

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;
}
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...