2013-07-10 5 views
38

BorderPaneには、ScrollPaneを中心要素として使用しています。それは画面を満たすために自動的にサイズを変更します。 ScrollPaneの中には内容がなく、ドラッグアンドドロップ対象のHBoxです。したがって、私はそれが親のScrollPaneを埋めることを望みます。現在のサイズに合わせてJavaFX ScrollPaneコンテンツのサイズを変更する方法

これを行うにはどのような方法が良いですか?

HBoxのサイズを変更するには、ScrollPane.resize(...)メソッドをオーバーライドしていますが、それはやや複雑で非標準的です。

編集:これは私が問題を回避することができる方法で、これまでいくつかの便利なコードを追加するには、私はこれを行うためにいくつかのより良い方法がなければならないと考えている。一部はここから取ら

@Override 
public void resize(double width, double height) { 
    super.resize(width, height); 

    double scrollBarHeight = 2; 
    double scrollBarWidth = 2; 

    for (final Node node : lookupAll(".scroll-bar")) { 
     if (node instanceof ScrollBar) { 
      ScrollBar sb = (ScrollBar) node; 
      if (sb.getOrientation() == Orientation.HORIZONTAL) { 
       System.out.println("horizontal scrollbar visible = " + sb.isVisible()); 
       System.out.println("width = " + sb.getWidth()); 
       System.out.println("height = " + sb.getHeight()); 
       if(sb.isVisible()){ 
        scrollBarHeight = sb.getHeight(); 
       } 
      } 
      if (sb.getOrientation() == Orientation.VERTICAL) { 
       System.out.println("vertical scrollbar visible = " + sb.isVisible()); 
       System.out.println("width = " + sb.getWidth()); 
       System.out.println("height = " + sb.getHeight()); 
       if(sb.isVisible()){ 
        scrollBarWidth = sb.getWidth(); 
       } 
      } 
     } 
    } 

    hBox.setPrefSize(width-scrollBarWidth, height-scrollBarHeight); 
} 

コード: How to access the Scrollbars of a ScrollPane

+0

、私は時々hgrowとvgrowにを入れて今働いている – user7867610

答えて

62

resize()メソッドをオーバーライドすることなく、

ScrollPane scrollPane = new ScrollPane(); 
scrollPane.setFitToHeight(true); 
scrollPane.setFitToWidth(true); 

を試してみてください。

+1

私が思ったのと同じように、私はちょうど見つけられなかった明らかな方法がなければならなかった。あなたの答えをありがとう! – Lennert

+0

xmlのsetFitToHeightとsetFitToWidthのアクセス方法は何ですか? – Andrew121007

+6

@ Andrew121007それは '' –

17

XMLまたはCSSを通じてfitToHeightまたはfitToWidth属性を設定:

FXML:

<ScrollPane fx:id="myScrollPane" fitToHeight="true" fitToWidth="true" /> 

CSS:それは大丈夫です

+0

です.my-scroll-paneのようなものの代わりにScrollPaneを使って、おそらくFXMLの変更が必要になるでしょう。 – User

+0

@Manius thats true、しかしあなたはそれを具体的にするように注意するべきです。さもなければあなたのスクロールペインはすべて同じように振る舞い、おそらくそれを望まないでしょう。 – NDY

+0

このオプションは、シーンビルダで利用可能です。任意のスクロールペインで 'レイアウト' - > '特定'(上から2番目) - >幅/高さに合わせます。うまくいけば、これは誰かを助けるために私をしばらく時間がかかりました。 –

関連する問題