2015-06-08 2 views
2

Является новым для JavaFX и меняя только компонент сцены при нажатии кнопки, в то время как другие компоненты сцены остаются неизменными, это дает мне трудные времена. У меня есть splitpane с 2 подразделениями. Одна часть содержит HBox с кнопками и VBox - с другой. Как я могу заменить VBox в зависимости от нажатой кнопки? заранее спасибо, Ниже мой пример код:Как заменить компонент сцены нажатием кнопки inJavaFX

public class ShoolLibrary extends Application { 
    BorderPane b_pane; 
    SplitPane common; 
    Scene scene; 

    @Override 
    public void start(Stage primaryStage) { 

     primaryStage.setTitle("The Library"); 
     b_pane = new BorderPane(); 

     common = commonGround(); 

     b_pane.setCenter(common); 

     scene = new Scene(b_pane, 700, 480); 
     primaryStage.setScene(scene); 

     primaryStage.show(); 
    } 
    //Main Content 
    private SplitPane commonGround(){ 
     HBox hb = new HBox(); //Holds Buttons for Action 
     VBox vb = new VBox(); //This should change depending on button click 

      Button btn1 = new Button("library profile"); 
      Button btn2 = new Button("Books"); 
      Button btn3 = new Button("Members"); 

      //Button Action 
      btn1.setOnAction(actionEvent -> /*Replace vb with profile()*/); 
      btn2.setOnAction(actionEvent -> /*Replace vb with books()*/); 
      btn2.setOnAction(actionEvent -> /*Replace vb with members()*/)); 

      hb.getChildren().addAll(btn1,btn2,btn3); 

      SplitPane sp = new SplitPane(); 
      sp.setOrientation(Orientation.HORIZONTAL); 

      sp.getItems().addAll(hb,vb); 

      return sp; 
    } 

    private VBox profile(){ 
     txt = new Text("Inside library profile"); 
      VBox vbx1 = new VBox(); 
      vbx1.getChildren().add(txt); 
      return vbx1; 
    } 
    private VBox books(){ 
     txt = new Text("Inside books"); 
      VBox vbx1 = new VBox(); 
      vbx1.getChildren().add(txt); 
      return vbx1; 
    } 
    private VBox members(){ 
     txt = new Text("Inside Members"); 
      VBox vbx1 = new VBox(); 
      vbx1.getChildren().add(txt); 
      return vbx1; 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 

} 
+0

возможно дубликат [Загрузка нового FXML в одной и той же сцены] (http://stackoverflow.com/questions/18619394/ loading-new-fxml-in-the-same-scene) – ItachiUchiha

+0

@ ItachiUchiha, я не хотел включать fxml. –

ответ

3

Как об использовании панели обертки, в котором вы размещаете свои vBoxes?

Pane wrapperPane = new Pane(); 

sp.getItems().addAll(hb, wrapperPane); 

затем:

VBox library = profile() 
btn1.setOnAction(actionEvent -> 
    wrapperPane.getChildren().clear(); 
    wrapperPane.getChildren().add(library); 
); 

VBox books = books() 
btn2.setOnAction(actionEvent -> 
    wrapperPane.getChildren().clear(); 
    wrapperPane.getChildren().add(books); 
); 

и так далее ...

+0

Отличная идея @MrOerni, она отлично работает. спасибо –

+0

Добро пожаловать. – MrOerni

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