gpt4 book ai didi

css - JavaFX CSS 中的 -fx-padding 和 -fx-label-padding 有什么区别?

转载 作者:行者123 更新时间:2023-12-01 09:22:02 27 4
gpt4 key购买 nike

在 JavaFX CSS 中,一个 Label 似乎有 2 个 CSS 填充属性。

Label具有 Labeled 的所有属性, 在这之下我们有 -fx-label-padding.

但是,Labeled还具有 Control 的所有属性, 它具有 Region 的所有属性.在其下我们找到 -fx-padding.

对我来说,这两个属性似乎做同样的事情。有人能解释一下它们之间的区别吗,为什么我们需要 2 个,以及什么时候更喜欢一个?

最佳答案

-fx-label-padding 专门用于RadioButtonCheckBox

这里有一个小的 MCVE 演示了这个的目的:

public class MainApp extends Application {

/*
* (non-Javadoc)
* @see javafx.application.Application#start(javafx.stage.Stage)
*/
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane root = new BorderPane();
root.getStylesheets().add(this.getClass().getResource("MyPadding.css").toExternalForm());
Line line1 = new Line(-1, 1, 1, -1);
Line line2 = new Line(-1, -1, 1, 1);

HBox hb = new HBox(20.0);
// Labels
VBox vbLabels = new VBox(10.0);
Label label = new Label("Hello no padding");
label.setGraphic(Shape.union(line1, line2));
label.getStyleClass().add("no-padding");
Label label1 = new Label("Hello padding");
label1.setGraphic(Shape.union(line1, line2));
label1.getStyleClass().add("only-padding");
Label label2 = new Label("Hello label-padding");
label2.setGraphic(Shape.union(line1, line2));
label2.getStyleClass().add("only-label-padding");
Label label3 = new Label("Hello both paddings");
label3.setGraphic(Shape.union(line1, line2));
label3.getStyleClass().add("both-padding");
vbLabels.getChildren().addAll(label, label1, label2, label3);

// Radio buttons
VBox vbRadios = new VBox(10.0);
RadioButton radio = new RadioButton("Radio no padding");
radio.getStyleClass().add("no-padding");
RadioButton radio1 = new RadioButton("Radio only padding");
radio1.getStyleClass().add("only-padding");
RadioButton radio2 = new RadioButton("Radio label-padding");
radio2.getStyleClass().add("only-label-padding");
RadioButton radio3 = new RadioButton("Radio both paddings");
radio3.getStyleClass().add("both-padding");
vbRadios.getChildren().addAll(radio, radio1, radio2, radio3);

// Checkboxes
// Due to the bug (found in https://bugs.openjdk.java.net/browse/JDK-8089059) it is not really demonstrative.
VBox vbChecks = new VBox(10.0);
CheckBox check = new CheckBox("My Check 0");
check.getStyleClass().add("no-padding");
CheckBox check1 = new CheckBox("My Check 1");
check1.getStyleClass().add("only-padding");
CheckBox check2 = new CheckBox("My Check 2");
check2.getStyleClass().add("only-label-padding");
CheckBox check3 = new CheckBox("My Check 3");
check3.getStyleClass().add("both-padding");
vbChecks.getChildren().addAll(check, check1, check2, check3);

hb.getChildren().addAll(vbLabels, vbRadios, vbChecks);
root.setCenter(hb);
Scene scene = new Scene(root, 600.0, 500.0);
primaryStage.setScene(scene);
primaryStage.show();
}

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

}

还有名为 MyPadding.css 的 CSS 文件:

.no-padding {
-fx-border-color: black;
-fx-label-padding: 0 0 0 0;
-fx-padding : 0 0 0 0;
}

.only-padding {
-fx-border-color : red;
-fx-label-padding: 0 0 0 0em;
-fx-padding : 0 0 0 2em;
}

.only-label-padding {
-fx-border-color: blue;
-fx-label-padding: 0 0 0 2em;
-fx-padding: 0 0 0 0em;
}

.both-padding {
-fx-border-color: green;
-fx-label-padding: 0 0 0 2em;
-fx-padding : 0 0 0 2em;
}

结果是:

enter image description here

观察

  • 复选框在 Java 8 中显示得很奇怪(因为这个 known defect )。
  • RadioButton 示例显示 -fx-label-padding 使用户能够在 radio 和文本之间设置填充,而 -fx- padding 为所有组件设置填充。
  • -fx-label-padding-fx-paddingLabel相加。
  • 我相信它也用于在 Label 的文本和图形之间添加填充,但显然不是。

  • 关于css - JavaFX CSS 中的 -fx-padding 和 -fx-label-padding 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51151856/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com