2015-06-30 237 views
0

我有一個splitpane,它被分成4個不同的AnchorPanes。所以有3個分頻器,我需要按預定義的大小設置分頻器。我做了使用,如何在JavaFX中禁用拖拽Splitpane divider?

leftSplitPane.setDividerPositions(0.04f, 0.4f, 0.86f); 

然而,在UI,分隔仍拖動。我需要禁止拖動這些分隔線。我在SceneBuilder中嘗試了ResizableWithParent。但它不起作用。我也嘗試像這樣將anchorpane綁定到splitpane,但似乎是錯誤的。

leftAnchorPane.maxWidthProperty().bind(leftSplitPane.widthProperty().multiply(1)); 

請幫我解決這個問題。實現這一

+0

爲什麼使用splitpane如果你不要拖動分隔線? –

+0

我需要分離出4個組件。必須有一個分隔符來區分它們。 – NaveenBharadwaj

+0

您可以隨時將它們添加到GridPane或其他適合您需要並顯示邊框的佈局。 – ItachiUchiha

回答

2

一種方法是設定其更改偵聽器的分隔條位置固定值:

final double pos[] = 
{ 
    0.3f, 0.6f, 0.9f 
}; 

sp.setDividerPositions(pos); 

for (int i = 0; i < sp.getDividers().size(); i++) 
{ 
    final int ind = i; 
    SplitPane.Divider divider = sp.getDividers().get(i); 
    divider.positionProperty().addListener(
      (ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> 
      { 
       divider.setPosition(pos[ind]); 
      }); 
} 

隱完整的例子:

@Override 
public void start(Stage primaryStage) 
{ 
    SplitPane sp = new SplitPane(); 
    final StackPane sp1 = new StackPane(); 
    sp1.getChildren().add(new Button("Button One")); 
    final StackPane sp2 = new StackPane(); 
    sp2.getChildren().add(new Button("Button Two")); 
    final StackPane sp3 = new StackPane(); 
    sp3.getChildren().add(new Button("Button Three")); 
    sp.getItems().addAll(sp1, sp2, sp3); 

    final double pos[] = 
    { 
     0.04f, 0.4f, 0.86f 
    }; 

    sp.setDividerPositions(pos); 

    for (int i = 0; i < sp.getDividers().size(); i++) 
    { 
     final int ind = i; 
     SplitPane.Divider divider = sp.getDividers().get(i); 
     divider.positionProperty().addListener(new ChangeListener<Number>() 
     { 
      @Override 
      public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) 
      { 
       divider.setPosition(pos[ind]); 
      } 
     }); 
    } 

    Scene scene = new Scene(sp, 400, 400); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
+0

它說「這個lambda表達式指的是缺少的類型ObservableValue」 – NaveenBharadwaj

+1

它是警告還是語法錯誤? –

+0

語法錯誤。我只使用JDK 1.8。我使用了lambda表達式,如event - > System.out.println()。這工作 – NaveenBharadwaj