如何在 JavaFX 的工具栏中删除分隔符后的额外 space?

How to remove extra space after separator in toolbar in JavaFX?

这是我的代码:

public class NewMain1 extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        HBox root = new HBox();
        ToolBar toolbar = new ToolBar();
        toolbar.getItems().addAll(new TextField(), new Separator(), new Button("foo"), new Button("bar"));

        root.getChildren().addAll(toolbar);
        primaryStage.setScene(new Scene(root, 400, 400));
        primaryStage.show();
    }
}

这是结果:

如您所见,文本字段和分隔符(左边距)之间的距离小于分隔符和按钮(右边距)之间的距离。

谁能告诉我如何使用 CSS 减少右边距使右边距等于左边距?

您是否尝试过将场景生成器与 fxml 一起使用?这样您就可以拖动元素并设置它们之间的边距。

我检查了 ScenicView,分隔符中的线被渲染为一个区域,每个方向的填充为 3 像素,因此分隔符的宽度为 6 像素。

但它的呈现方式将实际的分隔线放在区域的左侧。

您可以通过调整线条的 CSS 规则来调整线条呈现(您可以在 JavaFX 发行版的 jar 文件中的 modena.css 中找到它们)。但是修改分隔符的 CSS 规则很混乱,我不推荐它。

而是在节点上设置边距以将其移动到您想要的位置(通常我不会推荐这样的 hack,但在这种情况下 IMO 是合适的)。

由于 ToolBar 在内部表示为一个 HBox,您可以使用 HBox 方法在 ToolBar 中的节点上设置边距。

要在左侧添加额外的 space,使该行在其显示中居中,请执行以下操作:

HBox.setMargin(sep, new Insets(0, 0, 0, 2.5));

或者,要从右侧删除 space,使该行在其显示中居中,请执行以下操作:

HBox.setMargin(sep, new Insets(0, -2.5, 0, 0));

我提供的保证金值只是示例。根据您的要求调整值。

示例代码

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class ToolBarApp extends Application {
    @Override
    public void start(Stage primaryStage) {
        HBox root = new HBox();
        ToolBar toolbar = new ToolBar();

        Separator sep = new Separator();
        toolbar.getItems().addAll(
                new TextField(),
                sep,
                new Button("foo"),
                new Button("bar")
        );
        HBox.setMargin(sep, new Insets(0, -2.5, 0, 0));

        root.getChildren().addAll(
                toolbar
        );

        Scene scene = new Scene(root, 400, 400);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

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