【问题标题】:Is it possible to scroll a JavaFX MenuBar是否可以滚动 JavaFX 菜单栏
【发布时间】:2013-01-27 21:39:55
【问题描述】:

我想将 javafx.scene.control.MenuBar 添加到 AnchorPane 中。 菜单条目的数量是灵活的。用户可以在 MenuBar 中添加一个或多个条目。 如果我只在 MenuBar 中使用几个菜单项,那么水平位置就足够了。

MenuBar menuBar = new MenuBar();
Menu menuFile = new Menu("File");
Menu menuEdit = new Menu("Edit");
Menu menuView = new Menu("View");
menuBar.getMenus().addAll(menuFile, menuEdit, menuView);

但如果条目多于几条,还有一些较长的条目,则没有足够的位置。 这不是正常情况,但有些用户希望添加更多菜单项。菜单项的最大数量将限制为十个条目。

MenuBar menuBar = new MenuBar();
Menu menu1 = new Menu("Long first menu");
Menu menu2 = new Menu("My second long entry");
Menu menu3 = new Menu("another long entry");
Menu menu4 = new Menu("Long menu 4");
Menu menu5 = new Menu("My fifth long entry");
Menu menu6 = new Menu("another long long entry");

menuBar.getMenus().addAll(menu1, menu2, menu3, menu4, menu5, menu6);

我的对话框不能调整大小。并且所有菜单都必须在 MenuBar 中的一行中。 这是一个 GUI 设计决策。

我想要一个带有可滚动菜单栏的解决方案。 如果此解决方案绝对不可能,则下一个解决方案可能是减少所有菜单的显示字符数。 例如:|长杉...|我的第二个...|另一个...| ... 但我更喜欢第一种解决方案。

【问题讨论】:

    标签: javafx menubar scrollable


    【解决方案1】:

    减少所有菜单的显示字符数。例如:|长杉...|我的第二个...|另一个...| ...

    这是放置在可调整大小窗格中的 MenuBar 的默认行为。

    这是一些使用长菜单示例的示例代码。

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.*;
    import javafx.scene.layout.*;
    import javafx.stage.Stage;
    
    public class ElidedMenu extends Application {
        @Override public void start(Stage stage) {
            MenuBar menuBar = new MenuBar();
            Menu menu1 = new Menu("Long first menu");
            Menu menu2 = new Menu("My second long entry");
            Menu menu3 = new Menu("another long entry");
            Menu menu4 = new Menu("Long menu 4");
            Menu menu5 = new Menu("My fifth long entry");
            Menu menu6 = new Menu("another long long entry");
    
            menuBar.getMenus().addAll(menu1, menu2, menu3, menu4, menu5, menu6);      
    
            StackPane stack = new StackPane();
            stack.getChildren().add(new Label("Hello World!"));
    
            VBox layout = new VBox();
            layout.getChildren().addAll(menuBar, stack);
            VBox.setVgrow(stack, Priority.ALWAYS);
    
            stage.setScene(new Scene(layout, 500, 250));
            stage.setResizable(false);
            stage.show();
        }
    
        public static void main(String[] args) { launch(args); }
    }
    

    示例代码的输出为:


    带有可滚动菜单栏的解决方案

    将 MenuBar 包装在 ScrollPane 中以使其可滚动。

    这是一些使用长菜单示例的示例代码。

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.*;
    import javafx.scene.layout.*;
    import javafx.stage.Stage;
    
    public class ScrollingMenu extends Application {
        @Override public void start(Stage stage) {
            MenuBar menuBar = new MenuBar();
            Menu menu1 = new Menu("Long first menu");
            Menu menu2 = new Menu("My second long entry");
            Menu menu3 = new Menu("another long entry");
            Menu menu4 = new Menu("Long menu 4");
            Menu menu5 = new Menu("My fifth long entry");
            Menu menu6 = new Menu("another long long entry");
    
            menuBar.getMenus().addAll(menu1, menu2, menu3, menu4, menu5, menu6);      
            ScrollPane scrollingMenu = new ScrollPane();
            scrollingMenu.setContent(menuBar);
    
            StackPane stack = new StackPane();
            stack.getChildren().add(new Label("Hello World!"));
    
            VBox layout = new VBox();
            layout.getChildren().addAll(scrollingMenu, stack);
            VBox.setVgrow(stack, Priority.ALWAYS);
    
            stage.setScene(new Scene(layout, 500, 250));
            stage.setResizable(false);
            stage.show();
    
            scrollingMenu.setPrefSize(stage.getScene().getWidth(), menuBar.getHeight());
        }
    
        public static void main(String[] args) { launch(args); }
    }
    

    示例代码的输出为:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多