当前位置: 首页 > 面试题库 >

如何在javaFX中使用左,中和右部分创建工具栏?

单于越
2023-03-14
问题内容

我正在尝试在javafx中创建自定义工具栏。该工具栏应该能够在其表面的中心,左侧和右侧(三个部分)显示控件。问题是我不知道要实现这一目标。我阅读了许多与此问题相关的提示,但它们对我不起作用,或者我做错了事…

无论如何,我写了几种方法,它们代表了实现工具栏的不同方法,但它们均无法正常工作。这是您的尝试:

  1. 使用HBox的Hgrow属性作为spring。没用
        public ToolBar createToolBar()
    {
        ToolBar toolBar = new ToolBar();
        Pane emptyPane = new Pane();
        HBox spring = new HBox(emptyPane);
        spring.setHgrow(emptyPane, Priority.ALWAYS);
        toolBar.getItems().addAll(spring, new Label("LABEL"));
        return toolBar;
    }

2.它适用于左右部分,但是如何定义中间一个呢?

        public AnchorPane createToolBar2()
        {
            AnchorPane toolBar = new AnchorPane();
            Label leftLabel = new Label("left");
            Label rightLabel = new Label("right");
            toolBar.getChildren().addAll(leftLabel, rightLabel);
            toolBar.setLeftAnchor(leftLabel, 0.0);
            toolBar.setRightAnchor(rightLabel, 0.0);
            return toolBar;
        }
  1. 这种方法适用于布局,但是我无法从左侧和中间部分监听事件,因为这些事件已被右侧部分覆盖(原因是StackPane),所以该解决方案也没有用。
        public StackPane createToolBar3()
    {
        StackPane toolBar = new StackPane();
        Button left = new Button("left button");
        Button right = new Button("right button");
        Button center = new Button("center button");
        HBox leftSection = new HBox(left);
        leftSection.setAlignment(Pos.CENTER_LEFT);
        HBox centerSection = new HBox(center);
        centerSection.setAlignment(Pos.CENTER);
        HBox rightSection = new HBox(right);
        rightSection.setAlignment(Pos.CENTER_RIGHT);
        toolBar.getChildren().addAll(leftSection, centerSection, rightSection);

        left.setOnAction(event -> System.out.println("left"));
        right.setOnAction(event -> System.out.println("right"));
        center.setOnAction(event -> System.out.println("center"));
        return toolBar;
    }

我在该代码块中调用以上方法:


       @Override
        public void start(Stage stage) {

            BorderPane borderPane = new BorderPane();
            borderPane.setPrefWidth(500);
            borderPane.setPrefHeight(300);
            borderPane.setTop(createToolBar4());
            stage.setScene(new Scene(borderPane));
            stage.show();
        }

在这方面的任何帮助,我将不胜感激。


问题答案:

只需使用HBox代替StackPane。StackPane将节点置于彼此之上。

请参阅第三次尝试的修改示例。

另一个选择是使用FXToolBar,类似于jewelsea)已经提到的方式:

查看使用工具栏的示例。

两种尝试都应该足够灵活以满足您的需求。它们的不同之处在于您可以控制多少布局以及可以从标准工具栏继承多少功能。



 类似资料:
  • 我试图在JavaFX中创建一个定制的工具栏。此工具栏应该能够在其表面的中心、左侧和右侧(三个部分)显示控件。问题是我不知道要怎么做。我读了很多与这个问题相关的提示,但它们对我不起作用,或者我做错了什么... 上面是我在代码块中调用的方法: 如果在那件事上有任何帮助,我将不胜感激。

  • JavaFX8控制器如何判断Shift、Ctrl、Alt或Enter键位于键盘的左边还是右边? 尝试使用JNativeHook(他们最近移动了),它几乎可以作为一个解决方案,但不能识别一些键,时间不精确,实现起来有点笨拙,尤其是因为我不能为所有平台编译本机代码。许可条款也有点混乱(稳定版本的GPL,在我的情况下不是一个选项,可能会转向LGPL...)。

  • 我正在用javafx设计一个独立的应用程序(带有scenebuilder 8的FXML),现在我需要在FXML中创建一个CheckBoxTreeItem(查看下图)。 方格树 在搜索时,我得到了一个链接“https://docs.oracle.com/javase/8/scene-builder-2/user-guide/library-panel.htm这有助于我将定制的CheckBoxTree

  • 本文向大家介绍如何在JavaFX中创建RadioMenuItem?,包括了如何在JavaFX中创建RadioMenuItem?的使用技巧和注意事项,需要的朋友参考一下 菜单是提供给用户的选项或命令的列表,通常菜单包含执行某些操作的项目。菜单的内容称为菜单项,菜单栏包含多个菜单。 JavaFx支持三种菜单项,即-检查菜单项,自定义菜单项和单选菜单项。 RadioMenuItem RadioMenuI

  • 本文向大家介绍如何在JavaFX中创建ButtonBar?,包括了如何在JavaFX中创建ButtonBar?的使用技巧和注意事项,需要的朋友参考一下 以下示例演示了ButtonBar的创建。 输出结果

  • 本文向大家介绍如何在JavaFX中创建MenuButton?,包括了如何在JavaFX中创建MenuButton?的使用技巧和注意事项,需要的朋友参考一下 一个菜单 是呈现给用户的选项或命令的列表,通常菜单中包含的执行某些操作的项目。菜单的内容称为菜单项,菜单栏包含多个菜单。 通常,按钮在用户界面应用程序中进行控制,单击该按钮将执行相应的操作。 MenuButton是一个简单的按钮,在单击它时显示