我有一个菜单,应该用于浏览不同的“视图”(布局) . 菜单应始终可见 . 唯一应该改变的是显示的内容,取决于所选的菜单项 .
我有一个非常基本的例子,使用下面创建的两个类:
public class Main extends Application{
static final Pane pane = new Pane();
public void start(Stage stage) {
pane.getChildren().addAll(Menu.getPaneMenu());
Scene scene = new Scene(pane);
stage.setScene(scene);
stage.setMaximized(true);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
public class Menu {
private static final Pane paneMenu = new Pane();
static Pane getPaneMenu() {
Button btn1 = new Button("Menu 1");
btn1.relocate(100, 10);
btn1.setPrefSize(100, 20);
btn1.setOnAction(e -> {
Label lbl = new Label("You clicked Menu1");
lbl.relocate(200, 40);
Main.pane.getChildren().add(lbl);
});
Button btn2 = new Button("Menu 2");
btn2.relocate(300, 10);
btn2.setPrefSize(100, 20);
btn2.setOnAction(e -> {
Label lbl = new Label("You clicked Menu2");
lbl.relocate(200, 40);
Main.pane.getChildren().add(lbl);
});
paneMenu.getChildren().addAll(btn1, btn2);
return paneMenu;
}
}
我面临的挑战是,单击菜单时,旧菜单会保留(如您所见,显示的文本会覆盖另一个):
什么是解决这种重叠的有效方法?
2 回答
这是一个示例,显示如何在
BorderPane
中加载两个不同的Pane
.将标签声明为Menu类的字段(与按钮相同)怎么样?然后你可以从
pane
添加/删除它们 . 我稍微修改了你的代码 - 它应该适用于这种特殊情况:如果有更多的元素而不仅仅是
Label
,如果你把它们放在某种_312229中会更好 . 比你可以添加/删除Pane
. 顺便说一下 - 看看Working With Layouts in JavaFX?我不认为使用relocate()
是一个很好的做法 .