在 JavaFX 中制作垂直菜单栏

Posted

技术标签:

【中文标题】在 JavaFX 中制作垂直菜单栏【英文标题】:Make vertical Menu Bar in JavaFX 【发布时间】:2014-03-26 10:51:55 【问题描述】:

自从我与计算机交互以来,我只看到水平方向的菜单栏。这种菜单栏的菜单项将向下弹出。在 JavaFX 中,很容易创建这样一个带有水平菜单栏的菜单。

是否可以在 JavaFX 中创建垂直菜单栏?我还希望菜单项向左或向右弹出,而不是向下弹出。

我可以实现我想要的这样一个菜单吗?有人请帮忙。

【问题讨论】:

不确定,但由于 javafx 支持 css 样式,您是否尝试过 css 菜单样式来这样做..? 【参考方案1】:

您可以利用 MenuButton 来实现这一点:

@Override
public void start(Stage primaryStage) 
    MenuButton m = new MenuButton("Eats");
    m.setPrefWidth(100);
    m.setPopupSide(Side.RIGHT);
    m.getItems().addAll(new MenuItem("Burger"), new MenuItem("Hot Dog"));

    MenuButton m2 = new MenuButton("Drinks");
    m2.setPrefWidth(100);
    m2.setPopupSide(Side.RIGHT);
    m2.getItems().addAll(new MenuItem("Juice"), new MenuItem("Milk"));

    VBox root = new VBox();
    root.getChildren().addAll(m, m2);

    Scene scene = new Scene(root, 300, 250);
    scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());
    primaryStage.setScene(scene);
    primaryStage.show();

style.css 在哪里

.menu-button 
    -fx-skin: "com.sun.javafx.scene.control.skin.MenuButtonSkin";
    -fx-background-color: red, green, green, lightgreen;
    -fx-background-insets: 0 0 -1 0, 0, 1, 2;
    -fx-background-radius: 0;
    -fx-padding: 0.0em; /* 0 */
    -fx-text-fill: -fx-text-base-color;


/* TODO workaround for RT-19062 */
.menu-button .label  -fx-text-fill: -fx-text-base-color; 

.menu-button:focused 
    -fx-color: beige;
    -fx-background-color: -fx-focus-color, -fx-outer-border, -fx-inner-border, -fx-body-color;
    -fx-background-insets: -1.4, 0, 1, 2;
    -fx-background-radius: 0;


.menu-button:hover 
    -fx-color: darkgreen;


.menu-button:armed 
    -fx-color: greenyellow;

这些选择器部分取自 caspian.css。根据需要更改颜色偏好,您还可以通过 css 删除按钮的箭头。

这种方法的缺点是难以制作嵌套菜单项。

【讨论】:

以上是关于在 JavaFX 中制作垂直菜单栏的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX如何在底部获取菜单栏

Web垂直菜单栏的制作

如何在 Tkinter 中创建垂直菜单栏?

是否可以滚动 JavaFX 菜单栏

javafx中菜单上的单击事件

无法使用系统菜单栏 Javafx