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

我正在尝试在javafx中创建自定义工具栏。 此工具栏应该能够在其表面的中心,左侧和右侧(三个部分)显示控件。 问题是我不知道这个问题。 我读了很多与这个问题有关的提示,但是他们不适合我,或者我做错了什么……

无论如何,我写了几个方法,它们代表了实现我的工具栏的不同方法,但没有一个正常工作。 在这里你有我的尝试:

  1. 使用HBox Hgrow属性作为弹簧。 没工作。

    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将节点放在彼此之上。

查看第三次尝试的修改示例。

另一种选择是使用FX ToolBar,类似于jewelsea已经提到的:

请参阅使用ToolBar的示例。

两种尝试都应该足够灵活,以满足您的需求。 它们的不同之处在于您对布局的控制程度以及您可以从标准ToolBarinheritance的function数量。

ToolBar部分对齐的Spring方法对我来说很好。

springtool

 import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.*; import javafx.stage.Stage; public class SectionalToolbar extends Application { @Override public void start(Stage stage) throws Exception { final Pane leftSpacer = new Pane(); HBox.setHgrow( leftSpacer, Priority.SOMETIMES ); final Pane rightSpacer = new Pane(); HBox.setHgrow( rightSpacer, Priority.SOMETIMES ); final ToolBar toolBar = new ToolBar( new Button("Good"), new Button("Boys"), leftSpacer, new Button("Deserve"), new Button("Fruit"), rightSpacer, new Button("Always") ); toolBar.setPrefWidth(400); BorderPane layout = new BorderPane(); layout.setTop(toolBar); stage.setScene( new Scene( layout ) ); stage.show(); } public static void main(String[] args) { launch(); } } 

ToolBar (至少在Java 8的标准modena.css样式表中)已经在内部实现为HBox容器,因此您可以使用HBox.setHgrow方法调整放置在工具栏中的项目的内部布局约束。

此示例中的左侧和右侧间隔器实现为空白窗格,其将仅增长和缩小以适合可用空间。

如果你想要一个固定大小的垫片,而不是HBox.setHgrow,你可以使用类似的东西:

 leftSpacer.setPrefSize(20); leftSpacer.setMinSize(HBox.USE_PREF_SIZE); leftSpacer.setMaxSize(HBox.USE_PREF_SIZE); 

将FXML与@jewelsea结合使用。