2015-06-30 4 views
0

У меня есть splitpane, который разделен на 4 разных AnchorPanes. Таким образом, есть 3 разделителя, и мне нужно установить разделители на заранее определенный размер. Я делаю это с использованием,Как отключить перетаскивание разделительного разделителя в JavaFX?

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

Однако в пользовательском интерфейсе разделители по-прежнему перетаскиваются. Мне нужно запретить перетаскивание этих разделителей. Я попробовал ResizableWithParent в SceneBuilder. Но это не сработает. Я также пытался привязать якорь к 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

В нем говорится: «Это выражение лямбда относится к отсутствующему типу ObservableValue» – NaveenBharadwaj

+1

Является ли это предупреждением или синтаксической ошибкой? –

+0

синтаксическая ошибка. Я использую только JDK 1.8. Я использовал лямбда-выражения, например event -> System.out.println(). Это работает – NaveenBharadwaj

Смежные вопросы