2013-02-21 2 views
-1

Я пытаюсь создать класс бесконечной координатной платы с сеткой. Я расширил JViewport и он рисует в исходном положении ok (внутри JScrollPane). Как сообщить панели прокрутки, что есть прокрутка в любом направлении?Как правильно расширить JViewport?

Следующая не помогает

  JCoordinateViewport coordinate = new JCoordinateViewport(); 
      coordinate.setBackground(Color.WHITE); 
      //coordinate.setPreferredSize(new Dimension(10000, 10000)); 

      JScrollPane scroll = new JScrollPane(); 
      //scroll.setViewportView(coordinate); 
      scroll.setViewport(coordinate); 
      scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
      scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
      scroll.getVerticalScrollBar().setMinimum(-10000); 
      scroll.getVerticalScrollBar().setMaximum(+10000); 
      scroll.getHorizontalScrollBar().setMinimum(-10000); 
      scroll.getHorizontalScrollBar().setMaximum(+10000); 

UPDATE

ли знает, кто как JScrollPane определяет диапазон прокрутки от его видовой экран?

UPDATE2

Я обнаружил, что полосы прокрутки появляются т работать, если максимумы и минимумы устанавливаются после setVisible называется.

Но, к сожалению, paintConponent не требует свитка.

Почему?

Update3

Хотя полосы прокрутки работают, они не меняют видовых положение.

Почему?

+0

скроллинг на основе предпочтительного размера компонента добавляется в окне просмотра в ScrollPane. – camickr

+0

У меня нет компонента, я расширяю 'JViewport', а его компонент равен« null ». –

+0

Ну, прокрутка была разработана для отображения компонента в своем окне просмотра, так что это будет вашей проблемой. – camickr

ответ

2
CoordinateViewport coordinate = new JCoordinateViewport(); coordinate.setBackground(Color.WHITE); //coordinate.setPreferredSize(new Dimension(10000, 10000)); 

JScrollPane scroll = new JScrollPane(); //scroll.setViewportView(coordinate); 
scroll.setViewport(coordinate); 
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
scroll.getVerticalScrollBar().setMinimum(-10000); 
scroll.getVerticalScrollBar().setMaximum(+10000); 
scroll.getHorizontalScrollBar().setMinimum(-10000); 
scroll.getHorizontalScrollBar().setMaximum(+10000); 

.

Следующая не помогает

  • тогда вопрос должен быть только в классе с именем CoordinateViewport

  • для лучшей помощи рано опубликовать SSCCE, короткие, работоспособным, компилируется, около JFrame, JScrollPane и JViewport

  • для уменьшения мерцания в JViewport требуется установить

    1. собственный RepaintManager

    2. и используя/с методами built_in в JViewport

    JViewport.setScrollMode (JViewport.BLIT_SCROLL_MODE); JViewport.setScrollMode (JViewport.BACKINGSTORE_SCROLL_MODE); JViewport.setScrollMode (JViewport.SIMPLE_SCROLL_MODE);

  • см Passing current Date и JTable how to change BackGround Color в качестве потенциального источника для SSCCE

2

Как показано here, картина на JViewport, кажется, «прилипнет» к иллюминатору, а картина на нижележащих прокручивать слайды компонентов под ним. Размеры являются целыми кратными TILE: для демонстрационных целей предпочтительный размер окна просмотра меньше, чем нижняя панель; на практике лучше переопределить getPreferredSize(). См. Также ScrollAction, который автоматически прокручивается, когда мышь находится рядом с любой границей.

image