在JavaFX CSS中,Label
似乎具有2个CSS填充属性。
Label
具有Labeled
的所有属性,在此之下,我们具有-fx-label-padding
。
但是,Labeled
也具有Control
的所有属性,而该属性具有Region
的所有属性。在此之下,我们找到-fx-padding
。
在我看来,这两个属性似乎做的完全相同。有人可以解释它们之间的区别,为什么我们需要2,以及何时优先选择一个?
答案 0 :(得分:3)
-fx-label-padding
特别用于RadioButton
和CheckBox
。
这里有一个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;
}
结果是:
观察
RadioButton
的示例显示,-fx-label-padding
使用户可以在广播和文本之间设置填充,而-fx-padding
可以为所有组件设置填充。
-fx-label-padding
和-fx-padding
互为Label
添加。
Label
的文本和图形之间添加填充,但显然不是。
答案 1 :(得分:2)
来自the javadoc of the Labeled.labelPadding
property:
$('.dropdown').on('click', function (e){ $('#message').text('Clicked '+e.target.tagName); });
的文本和图形内容周围的填充。 [...]子类可以在此填充之外和Labeled
的{{1}}内添加节点。
对于Labeled
,padding
和Label
都简单地添加在一起。但是对于Region.padding
的不同子类来说,还是有所不同。例如。 Labeled.labelPadding
和Labeled
将其添加到图形/文字和标记之间