对JavaFX不熟悉并且在按钮点击时仅更改场景的一个组件,而场景的其他组件保持不变让我很难过。 我有一个分为2个分区的分隔板。一部分包含带按钮的HBox和另一部分带有VBox的部分。如何根据点击的按钮更换VBox?在此先感谢,下面是我的示例代码:
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 :(得分:3)
如何使用放置vBox的包装器窗格?
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 );
);
依旧......