JavaFX: изменение размера узла не работает должным образом

Я определил FXML с GridPane из 8 строк, который содержит следующие компоненты (определения FXML и CSS приведены в конце этой темы):

  • 2 флажка,
  • 2 этикетки,
  • 2 этикетки с регионом и
  • 2 кнопки с регионом

Регион здесь используется для загрузки изображений, что делается с помощью стиля CSS. Для каждого набора компонентов, определенных выше (например, 2 флажка), я беру один и увеличиваю его размер, используя стиль -fx-font-size. В частности, я определяю размер шрифта как "1.3xDefault_System_Font_Size (12)". Теги (INC) и (DEF) в тексте каждого компонента используются для описания того, увеличивается ли размер шрифта или остается значение по умолчанию.

введите здесь описание изображения

Как видно из приведенного выше снимка экрана, метка флажка увеличилась, а само поле — нет. То же самое относится и к изображениям, их размер не увеличился, а увеличился размер метки.

Ситуация усугубляется, когда я изменяю размер шрифта по умолчанию в .root:

.root{
    -fx-font-size: 28;
}

В приведенном выше примере, поскольку я изменил размер шрифта по умолчанию с 12 на 28, я ожидаю, что все метки и изображения изменят свой размер в соответствии с этим новым размером. Размер изображения определяется параметром -fx-background-size, который равен 4em.

Однако все метки увеличиваются правильно, но изображения увеличиваются правильно только на тех узлах с тегом DEF. То же самое относится и к флажку, где его метка и поле увеличены на DEF, в то время как размер метки только с тегом INC увеличился правильно, а поле осталось маленьким.

введите здесь описание изображения

Есть ли способ сделать изображения и флажок флажка, чтобы правильно увеличить их размер? Это баг, или я что-то не так делаю?

FXML: панель сетки

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.Region?>
<?import javafx.scene.layout.RowConstraints?>

<GridPane stylesheets="@css/Test.css" vgap="5.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ebay.client.controller.SettingsScreenController">
    <children>
        <CheckBox nodeOrientation="RIGHT_TO_LEFT" styleClass="increased_font" text="CheckBox (Inc)" GridPane.rowIndex="1" />
        <CheckBox nodeOrientation="RIGHT_TO_LEFT" text="CheckBox (Def)" GridPane.rowIndex="2" />
        <Label cache="true" styleClass="increased_font" text="Label (Inc)" GridPane.rowIndex="3" />
        <Label cache="true" text="Label (Def)" GridPane.rowIndex="4" />
        <Label cache="true" styleClass="increased_font" text="Label With Image (Inc)" GridPane.rowIndex="5">
            <graphic><Region styleClass="javasuns_logo" /></graphic>
        </Label>
        <Label cache="true" text="Label With Image (Def)" GridPane.rowIndex="6">
            <graphic><Region styleClass="javasuns_logo" /></graphic>
        </Label>
        <Button styleClass="increased_font" text="Button With Image (Inc)" GridPane.rowIndex="7">
            <graphic><Region styleClass="javasuns_logo" /></graphic>
        </Button>
        <Button text="Button With Image (Def)" GridPane.rowIndex="8">
            <graphic><Region styleClass="javasuns_logo" /></graphic>
        </Button>
    </children>
</GridPane>

CSS: Test.css

.increased_font {
    -fx-font-size: 1.3em;
}

.javasuns_logo {
    -fx-font-size: null;
    -fx-pref-height: 2em;
    -fx-pref-width: 4em;
    -fx-background-image: url('../../icons/logo/javasuns.png');
    -fx-background-size: 4em;
    -fx-background-repeat: no-repeat;
    -fx-background-position: center;
}

person javasuns    schedule 02.04.2016    source источник


Ответы (1)


Я знаю, что это старый вопрос, но я тоже борюсь с этим прямо сейчас. Я обнаружил, что когда вы используете pref-height и pref-width, вы не можете использовать -fx-font-size в том же классе, потому что он «сбрасывает» .root -fx-font-size до значения по умолчанию 12. .

Я хотел установить определенный размер шрифта для некоторых кнопок, а также установить ширину и высоту, используя значения em. Это было невозможно, поэтому я создал метку внутри элемента Button, и здесь я могу правильно изменить размер шрифта метки. Поэтому, если я не использую размер шрифта и предустановленную ширину/высоту в том же классе/одном элементе управления, похоже, что он работает.

person Bartek    schedule 15.01.2018