2013-02-21 97 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

滾動是基於加入到該滾動窗格的視口中的部件的優選尺寸。 – camickr 2013-02-21 22:29:07

+0

我沒有組件,我擴展'JViewport',它的組件是'null'。 – 2013-02-21 22:35:51

+0

那麼一個scrollpane被設計爲在其視口中顯示一個組件,所以這將是你的問題。 – camickr 2013-02-22 01:23:26

回答

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,短,可運行,編譯,大約是JFrameJScrollPaneJViewport

  • JViewport閃爍的減少需要設置

    1. 自己RepaintManager

    2. ,並通過在JViewport

    JViewport.setScrollMode使用/使用BUILT_IN方法(JViewport.BLIT_SCROLL_MODE ); JViewport.setScrollMode(JViewport.BACKINGSTORE_SCROLL_MODE); JViewport.setScrollMode(JViewport。SIMPLE_SCROLL_MODE);

  • 請參閱Passing current DateJTable how to change BackGround Color作爲潛在來源SSCCE

2

如圖here,在JViewport畫出現「粘」到視,而在底層滾動組件滑動畫下方。尺寸是TILE的整數倍:出於演示目的,視口的首選尺寸比底層面板小;在實踐中,最好覆蓋getPreferredSize()。另請參閱ScrollAction,當鼠標懸停在任何邊界附近時,它會自動滾動。

image