2012-11-13 13 views
5

JScrollPanelビューの幅を制限するにはどうすればよいですか?私はどんな場合でも水平スクロールを起こさせたくありません。私は自分自身にJViewportを供給しようとしましたが、それはあまり役に立ちません。私はその最大幅をとる供給JScrollPaneJScrollPaneビューの幅を制限する

Container fpdp = .... 

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

contentsインスタンスを作成

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幅ので、水平スクロールは文句を言わない起こらないようにしたいです。私は間違って何をしていますか?

+1

質問が分かりません。 'JScrollPane'の内容が、' JScrollPane'の実際のサイズよりも広い場合、どうなるでしょうか。単に切断する?その場合は、スクロールバーを非表示にすることを検討することもできます( 'JScrollPane#getHorizo​​ntalScrollBar#setVisible(false)'); – Robin

+0

@Robin、Not Cut。ビューの幅をスクロールペインの幅に縮小します。境界線のレイアウトとコンテンツが中央に配置されたパネルを想像してみてください。しかし、この場合、コンテンツの幅はパネルの幅に制限され、内容の高さは必要に応じて大きくなることがあります(スクロールバーの追加による)。 –

+1

私は、JViewPortがそれが達成できる幅に関して制限を設けるのは、JViewPortの責任ではないと思っています。これは、ビュー自体についてです。 ['Scrollable#getScrollableTracksViewportWidth'](http://docs.oracle.com/javase/7/docs/api/javax/swing/Scrollable.html)インタフェースを見てください。 ://docs.oracle.com/javase/7/docs/api/javax/swing/Scrollable.html#getScrollableTracksViewportWidth%28%29) – MadProgrammer

答えて

2

ご迷惑をおかけして申し訳ありません。私はそれを行う方法を見つけました。 JScrollpane needs to shrink its widthに感謝します。

私が直面したもう1つの問題は、ScrollablePanelのレイアウトマネージャが間違っています。それはすべてのものをねじ込んだFlowLayoutでした。私はすぐにそれを理解していないし、問題がScrollableインターフェイスの使用であると思った。

だから私はScrollablePanelをとり、そのレイアウトマネージャーをBorderLayoutに設定しました。

関連する問題