在javafx中我提前绘制好了menubar并未他添加了menu和menuitem现在我想在切换menuitem时能够在menubar以外的区域展示提前绘制好的页面也就是我想只在menuitem的事件回调中切换画面而不是绘制画面
要在切换菜单项时在menubar以外展示预先绘制好的页面,您可以使用StackPane来实现这个功能。StackPane可以让您在同一个场景中叠放多个组件,只有一个组件处于可见状态,其他组件被隐藏。当您需要在菜单项事件回调中切换画面时,只需要改变StackPane的可见组件即可。
以下是示例代码:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class MenuSwitchDemo extends Application {
private StackPane stackPane;
@Override
public void start(Stage primaryStage) throws Exception {
// 创建MenuBar并添加Menu和MenuItem
MenuBar menuBar = new MenuBar();
Menu menu = new Menu("Menu");
MenuItem item1 = new MenuItem("Item 1");
MenuItem item2 = new MenuItem("Item 2");
menu.getItems().addAll(item1, item2);
menuBar.getMenus().add(menu);
// 创建预先绘制好的页面
Label label1 = new Label("Page 1");
Label label2 = new Label("Page 2");
// 创建StackPane并添加预先绘制好的页面
stackPane = new StackPane();
stackPane.getChildren().addAll(label1, label2);
// 默认显示第一个页面
stackPane.getChildren().get(0).setVisible(true);
// 添加菜单项事件回调
item1.setOnAction(event -> {
// 切换到第一个页面
stackPane.getChildren().get(0).setVisible(true);
stackPane.getChildren().get(1).setVisible(false);
});
item2.setOnAction(event -> {
// 切换到第二个页面
stackPane.getChildren().get(0).setVisible(false);
stackPane.getChildren().get(1).setVisible(true);
});
// 创建场景并添加MenuBar和StackPane
Scene scene = new Scene(new StackPane(menuBar, stackPane), 400, 300);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
在这个示例中,我们先创建了一个MenuBar并添加了一个Menu和两个MenuItem。然后创建了两个Label作为预先绘制好的页面,再创建一个StackPane并将两个Label添加到其中。在菜单项事件回调中,我们根据需要改变StackPane中可见的组件,从而实现了在菜单项切换时展示预先绘制好的页面。最后,我们将MenuBar和StackPane添加到同一个StackPane中,并将其作为Scene的根节点。
原文地址: https://www.cveoy.top/t/topic/b72p 著作权归作者所有。请勿转载和采集!