如何在 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);
}
}
这是我的代码:
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);
}
}