如何在JavaFX菜单中添加ColorPicker组件
你可以通过以下两种方式实现将ColorPicker与MenuBar的顶层菜单项并排显示:
方法一:用HBox组合MenuBar和ColorPicker
这种方式最直接,把MenuBar和ColorPicker放在同一个水平容器中,让它们在顶部区域并排展示:
public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception { BorderPane root = new BorderPane(); // 创建常规菜单及MenuBar MenuBar menuBar = new MenuBar(); Menu fileMenu = new Menu("文件"); Menu editMenu = new Menu("编辑"); menuBar.getMenus().addAll(fileMenu, editMenu); // 创建ColorPicker并设置合适宽度 ColorPicker colorPicker = new ColorPicker(Color.BLACK); colorPicker.setPrefWidth(120); // 用HBox组合MenuBar和ColorPicker,让MenuBar占满剩余空间 HBox topContainer = new HBox(menuBar, colorPicker); HBox.setHgrow(menuBar, Priority.ALWAYS); root.setTop(topContainer); Scene scene = new Scene(root, 400, 400); primaryStage.setScene(scene); primaryStage.setTitle("颜色选择器示例"); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
方法二:将ColorPicker嵌入Menu中(隐藏下拉箭头)
如果希望ColorPicker视觉上和MenuBar融合更自然,可以把它放到自定义Menu里,隐藏默认的下拉箭头:
public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception { BorderPane root = new BorderPane(); MenuBar menuBar = new MenuBar(); // 常规菜单 Menu fileMenu = new Menu("文件"); Menu editMenu = new Menu("编辑"); // 包装ColorPicker的自定义Menu Menu colorMenu = new Menu(); ColorPicker colorPicker = new ColorPicker(Color.BLACK); colorPicker.setPrefWidth(120); // 将ColorPicker设为Menu的图形元素,调整样式匹配其他菜单 colorMenu.setGraphic(colorPicker); colorMenu.setStyle("-fx-background-insets: 0; -fx-padding: 0 5px;"); menuBar.getMenus().addAll(fileMenu, editMenu, colorMenu); root.setTop(menuBar); Scene scene = new Scene(root, 400, 400); primaryStage.setScene(scene); primaryStage.setTitle("颜色选择器示例"); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
补充说明
你之前使用的CustomMenuItem是用来将控件添加到菜单的下拉列表中的,并不适用于顶层菜单栏的并列需求,所以才会出现不符合预期的情况。
内容的提问来源于stack exchange,提问作者EpicPigeon
相关产品推荐
相关产品推荐

