因此,我环顾四周,但找不到有关如何在 JavaFX 中制作应用程序菜单的任何信息。
我看过一个项目' Jayatana ' 这似乎允许应用程序在至少使用 Intellij 的 Ubuntu 中拥有正确的应用程序菜单(例如)。
我还看到了一些建议,即使用以下内容对 OS X 用户有效:-
final List<MenuBase> menus = new ArrayList<>();
menus.add(GlobalMenuAdapter.adapt(menu));
Toolkit.getToolkit().getSystemMenu().setMenus(menus);
还有NSMenuFX项目,同样适用于 OS X。
我还看到了 java-gnome我认为仅适用于 Swing 的项目。
但我真正喜欢的是某种制作应用程序菜单的方法,最好以非操作系统特定的方式。
我很高兴使用第三方 jar 或任何可以完成繁重工作的东西,但真的,这样的东西存在吗?
在这一点上,我最好的选择是使用 Swing 创建 JavaFX 应用程序的 shell ,并使用将应用程序菜单与 Swing 集成的方法?如果是这种情况,是否可以从 JavaFX 自动执行此操作并处理不同实现的切换?
编辑
最后,我只是将 Swing 和 JavaFX 结合使用。我将 JavaFX 应用程序放入其中,允许我使用已经在 Swing 中工作的应用程序菜单。
不理想,但确实有效。
最佳答案
我想你只是在找 MenuBar.useSystemMenuBarProperty()
.如果您在菜单栏上调用此方法,则如果平台支持系统菜单(例如 OS X),则菜单将不会出现在场景图中,而是用作系统菜单。
SSCCE:
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class SystemMenuExample extends Application {
@Override
public void start(Stage primaryStage) {
MenuBar menuBar = new MenuBar();
Menu menu = new Menu("File");
MenuItem quit = new MenuItem("Quit");
quit.setOnAction(e -> Platform.exit());
menu.getItems().add(quit);
menuBar.getMenus().add(menu);
menuBar.setUseSystemMenuBar(true);
BorderPane root = new BorderPane();
root.setTop(menuBar);
Scene scene = new Scene(root, 600, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
关于JavaFX 应用程序菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35351097/