JavaFX 菜单栏中的菜单右对齐

2024-02-24

In Java Swing可以使用以下方法将菜单放在菜单栏的右侧:

menubar.add(menu1);
menubar.add(Box.createHorizontalGlue());
menubar.add(menu2);

这将把menu1在左边和menu2在右侧。此功能(显然)不可用JavaFX.

In JavaFX,我发现工具栏可以使用以下方法实现相同的效果:

final Pane rightSpacer = new Pane();
HBox.setHgrow(
    rightSpacer,
    Priority.SOMETIMES
);

不过,此解决方法不适用于菜单。

Question:有没有办法为菜单创建正确的间隔JavaFX?


一种稍微有点hacky的方法是在一个菜单中使用两个菜单栏HBox。您可以通过添加以下内容来为分隔它们的间隔提供与菜单栏相同的样式menu-bar其样式类:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.stage.Stage;

public class MenuAlignment extends Application {

    @Override
    public void start(Stage primaryStage) {
        MenuBar leftBar = new MenuBar();
        leftBar.getMenus().addAll(new Menu("File"), new Menu("Edit"));
        MenuBar rightBar = new MenuBar();
        rightBar.getMenus().addAll(new Menu("Help"));
        Region spacer = new Region();
        spacer.getStyleClass().add("menu-bar");
        HBox.setHgrow(spacer, Priority.SOMETIMES);
        HBox menubars = new HBox(leftBar, spacer, rightBar);

        BorderPane root = new BorderPane();
        root.setTop(menubars);
        Scene scene = new Scene(root, 600, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

这种方法的一个潜在缺点是您不能将其用作系统菜单栏 http://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/MenuBar.html#useSystemMenuBarProperty.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX 菜单栏中的菜单右对齐 的相关文章

随机推荐