2017-05-10 12 views
2

私はcssファイル別々のCSSルール

.split-pane > .split-pane-divider { 
    -fx-background-insets: 0; 
    -fx-padding: 0 0 0 0; 
    -fx-background-color: red; 
} 

で以下のCSSクラスを持っていると私は2つの分周器とのスプリットペインを持っていると私はノードとしてこれらの分周器への参照を持っています(!)。私は今、私はleftDividerを表示するためにwan'tが、rightDividerを表示しないように

List<Node> nodes=getDividerNodes(splitPane); 
leftDivider=nodes.get(0); 
rightDivider=nodes.get(1); 

... 
public static List<Node> getDividerNodes(SplitPane splitPane){ 
    Map<Double,Node> sortedMap=new TreeMap<>(); 
    if (splitPane.getOrientation()==Orientation.HORIZONTAL){ 
     splitPane.lookupAll(".split-pane-divider").stream().forEach(div -> { 
      if (div.getParent()==splitPane){ 
       sortedMap.put(div.getLayoutX(), div); 
      } 
     }); 
    }else{ 
     splitPane.lookupAll(".split-pane-divider").stream().forEach(div -> { 
      if (div.getParent()==splitPane){ 
       sortedMap.put(div.getLayoutY(), div); 
      } 
     }); 
    } 
    return new ArrayList<>(sortedMap.values()); 
} 

このようにそれらへの参照を取得

Node leftDivider; 
Node rightDivider; 

を意味します。私は

leftDivider.setStyle("-fx-padding: 0 5 0 0;"); 

しかし、私は左右両方の仕切りを見る。また、分周器だけを見たい場合は

rightDivider.setStyle("-fx-padding: 0 5 0 0;"); 

分周器は表示されません。

1つのスプリットペイン内の分周器を個別に制御が可能でないように私には思えます。私が間違っている場合は、どうすれば2つのディバイダのうち1つだけを表示することができますか?

+0

仕切りへの参照をどのように取得しているかを詳しく説明できますか? –

+0

@James_D私はコードを投稿しました。 –

+0

ええ、それはバグのように見えます... –

答えて

1

これはバグのように見えます。

private void layoutDividersAndContent(double width, double height) { 
    final double paddingX = snappedLeftInset(); 
    final double paddingY = snappedTopInset(); 
    final double dividerWidth = contentDividers.isEmpty() ? 0 : contentDividers.get(0).prefWidth(-1); 

    for (Content c: contentRegions) { 
//  System.out.println("LAYOUT " + c.getId() + " PANELS X " + c.getX() + " Y " + c.getY() + " W " + (horizontal ? c.getArea() : width) + " H " + (horizontal ? height : c.getArea())); 
     if (horizontal) { 
      c.setClipSize(c.getArea(), height); 
      layoutInArea(c, c.getX() + paddingX, c.getY() + paddingY, c.getArea(), height, 
       0/*baseline*/,HPos.CENTER, VPos.CENTER); 
     } else { 
      c.setClipSize(width, c.getArea()); 
      layoutInArea(c, c.getX() + paddingX, c.getY() + paddingY, width, c.getArea(), 
       0/*baseline*/,HPos.CENTER, VPos.CENTER); 
     } 
    } 
    for (ContentDivider c: contentDividers) { 
//  System.out.println("LAYOUT DIVIDERS X " + c.getX() + " Y " + c.getY() + " W " + (horizontal ? dividerWidth : width) + " H " + (horizontal ? height : dividerWidth)); 
     if (horizontal) { 
      c.resize(dividerWidth, height); 
      positionInArea(c, c.getX() + paddingX, c.getY() + paddingY, dividerWidth, height, 
       /*baseline ignored*/0, HPos.CENTER, VPos.CENTER); 
     } else { 
      c.resize(width, dividerWidth);     
      positionInArea(c, c.getX() + paddingX, c.getY() + paddingY, width, dividerWidth, 
       /*baseline ignored*/0, HPos.CENTER, VPos.CENTER); 
     } 
    } 
} 

あなたが見ることができるように、dividerWidthは単一分周器について計算され、同じ値がすべての分周器のレイアウトで使用される:特に、SplitPaneSkinクラスは、以下の方法を含んでいます。したがって、それぞれのスタイルにかかわらず、すべての仕切りは同じサイズです。

私は(私がquick searchを行なったし、何も見つかりませんでした)あなたはこれが既に報告されているかどうかを確認するために、検索をお勧めします、とされていない場合、それを報告します。

+0

残念ながら登録方法を見つけることができません。あなたはそれをする方法を知っていますか? –

+0

@Pavelプロジェクトの役割を持たないバグ(ここではhttp://bugs.java.com/)を提出することができます(Oracleの登録がまだ必要ですが、アカウントがなければアカウントを作成するリンクが表示されます)。 –

+0

ありがとうございました。 –

関連する問題