Стиль Javafx - наследование не работает интуитивно, -fx-text-fill не работает - PullRequest
1 голос
/ 31 октября 2019

Я новичок в JavaFX, и меня смущают стили. Я использую OpenJFX 13.0.1. У меня есть следующая простая сцена:

val oscs = HBox()
val osc1 = VBox()
val title = Text("Osc 1")
title.styleClass.add("text")
osc1.children.add(title)
oscs.children.add(osc1)

val root = BorderPane()
root.children.add(oscs)
val scene = Scene(root, 500.0,  400.0)

У меня есть две проблемы:

  1. -fx-text-fill не работает для окрашивания текста, тогда как -fx-fill,Т.е.

    .text {
        -fx-fill: #44FFFF;
    }
    

    работает, тогда как:

    .text {
        -fx-text-fill: #44FFFF;
    }
    

    - нет. Согласно документации, кажется, что это неправильно.

  2. Наследование не работает, как я ожидал. Разве дочерние узлы не наследуются от корня?

    Следующее не работает для окрашивания метки, независимо от того, -fx-fill или -fx-text-fill.

    .root {
        -fx-font-size: 24px;
        -fx-font-family: sans-serif;
        -fx-fill: #44FFFF;  
        -fx-background-color: #000000;
        -fx-border-color: #44FF00;
        -fx-border-width: 2px;
    }
    

Что я делаю не так?

1 Ответ

0 голосов
/ 31 октября 2019

Вы, вероятно, запутались Label и Text.

Text является подклассом Shape и не предоставляет свойства -fx-text-fill. Более того, свойство Shape -fx-fill не наследуется. См. Справочное руководство по CSS .

Помимо использования Label, вы можете использовать селектор-потомок для назначения заливки:

.root .text {
    -fx-fill: #44FFFF;  
}

Редактировать:

Label -fx-text-fill также не наследуется. Вы должны иметь возможность исправить оба случая, указав inherit в качестве значения для свойств -fx-text-fill или -fx-fill. Следующее должно работать для Text:

.root {
    -fx-fill: #44FFFF;
    -fx-background-color: #000000;
}

.text {
    -fx-fill: inherit;
}
...