В чем разница между -fx-padding и -fx-label-padding в JavaFX CSS?

В JavaFX CSS Label имеет 2 свойства заполнения CSS.

Label имеет все свойства Labeled, и под этим у нас есть -fx-label-padding.

Однако Labeled также имеет все свойства Control, который имеет все свойства Region. Под ним мы находим -fx-padding.

Мне кажется, что эти два свойства делают одно и то же. Может ли кто-нибудь объяснить разницу между ними, зачем нам два, а когда лучше одно другому?

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
3
0
2 616
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

От javadoc свойства Labeled.labelPadding:

The padding around the Labeled's text and graphic content. [...] Subclasses may add nodes outside this padding and inside the Labeled's padding.

Для Label и Region.padding, и Labeled.labelPadding просто складываются вместе. Однако для разных подклассов Labeled есть различия. Например. RadioButton и CheckButton добавляют это между графикой / текстом и меткой

Ответ принят как подходящий

-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);
   }

}

И файл CSS с именем MyPadding.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;
}

Это приводит к:

Наблюдение

  • В Java 8 флажки отображаются странно (из-за этого известный дефект).
  • Пример RadioButton показывает, что -fx-label-padding позволяет пользователю устанавливать отступы между радио и текстом, в то время как -fx-padding устанавливает отступы для всех компонентов.
  • -fx-label-padding и -fx-padding добавляются друг к другу для Label.
  • Я полагал, что он также использовался для добавления отступа между текстом и графикой Label, но, видимо, нет.
  • Спасибо за ваше объяснение. На примерах все очень наглядно.

    cyqsimon 04.07.2018 17:13

    Другие вопросы по теме