2012-11-13 91 views
5

如何限制JScrollPanel視圖寬度?無論如何我都不想橫向滾動。我試圖提供自己的JViewport但這並沒有太大的幫助。限制JScrollPane視圖寬度

private static class WidthRestrictingViewport extends JViewport { 
     private Container contents; 

     public WidthRestrictingViewport(final Container cnts) { 
      contents = cnts; 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      if (getParent() instanceof JScrollPane) { 
       JScrollPane sp = (JScrollPane) getParent(); 
       return new Dimension(sp.getWidth(), contents.getHeight()); 
      } 
      return super.getPreferredSize(); 
     } 

     @Override 
     public Dimension getMaximumSize() { 
      return getPreferredSize(); 
     } 
    } 

和代碼創建一個我需要提供其最大寬度JScrollPane

Container fpdp = .... 

    JScrollPane sp = new JScrollPane(); 
    sp.setViewport(new WidthRestrictingViewport(fpdp)); 
    sp.setViewportView(fpdp); 

contents實例,但是我想它的寬度不超過JScrollPane寬度,水平滾動不會發生。我究竟做錯了什麼?

+1

我不明白這個問題。當「JScrollPane」的內容大於「JScrollPane」的實際大小時,會發生什麼情況。簡單地切斷?在這種情況下,你可能會考慮讓滾動條不可見('JScrollPane#getHorizo​​ntalScrollBar#setVisible(false)'); – Robin

+0

@Robin,不切斷。縮小視圖寬度以滾動窗格寬度。試想一下,邊界佈局和內容放置在中心的面板。但在這種情況下,只有內容的寬度受面板寬度限制,並且內容的高度可能隨着需要而增加(使用滾動條添加)。 –

+1

我認爲'JViewPort'沒有責任限制其視圖的寬度,這更多的是視圖本身。看看['Scrollabe'](http://docs.oracle.com/javase/7/docs/api/javax/swing/Scrollable.html)接口,特別是['Scrollable#getScrollableTracksViewportWidth'](http ://docs.oracle.com/javase/7/docs/api/javax/swing/Scrollable.html#getScrollableTracksViewportWidth%28%29) – MadProgrammer

回答

2

對不起,我不好解釋。我找到了一個方法來做到這一點。感謝JScrollpane needs to shrink its width

我面對的另一個問題是ScrollablePanel中的錯誤佈局管理器。這是FlowLayout,搞砸了一切。我一次都不理解,並認爲問題在於接口使用Scrollable

因此,我只是把ScrollablePanel,並將其佈局管理器設置爲BorderLayout,現在一切正常!