Как изменить стиль вложенного элемента управления в tornadofx

Текстовое поле в JavaFx может иметь цвет фона, назначенный в css:

.text-area .content {
-fx-background-color: blue ;
}

Как мне сделать это в tornadoFx в объявлении стиля?

  override val root = gridpane {

    orderTextArea = textarea {
        isEditable = false
        prefWidth = 900.0
        prefHeight = 700.0
        isWrapText = true
        //textProperty().bind(viewModel.orderText)
        style {
            textFill = Color.YELLOW
            **//backgroundcolor**
         }

    }

person Marco    schedule 13.01.2018    source источник


Ответы (1)


У вас есть два варианта:

  1. Создайте таблицу стилей и опишите там правильный селектор
  2. Найдите подузел и примените стиль к нему напрямую

Вариант 2 не рекомендуется, потому что у вас нет гарантии, когда элемент управления фактически создает экземпляр этого подузла. У TornadoFX есть два способа сделать №1.

Вы можете создать безопасную таблицу стилей и добавить ссылку на нее в свой класс приложения. Таблица стилей будет выглядеть так:

class Styles : Stylesheet() {
    init {
        textArea {
            content {
                backgroundColor += Color.BLUE
            }
        }
    }
}

Как я уже упоминал, в TornadoFX есть еще одна возможность - создать встроенную таблицу стилей. Это не встроенный стиль, а полная таблица стилей, которая будет применяться только к узлу, на котором вы его определяете (и, конечно, к его подузлам).

textarea {
    prefWidth = 900.0
    prefHeight = 700.0
    stylesheet {
        Stylesheet.content {
            backgroundColor += Color.BLUE
        }
    }
}

Обратите внимание, что вам нужно ссылаться на определенные классы CSS в таблице стилей.

Создание таблицы стилей, безопасных для внешнего типа, всегда является лучшим вариантом.

person Edvin Syse    schedule 13.01.2018
comment
Параметр класса таблицы стилей невозможен, если вы используете tornadoFx в устаревшем приложении JavaFx (не производном от TornadoFx.App), не так ли? Я не нашел способа зарегистрировать класс таблицы стилей в этом случае - person Marco; 14.01.2018
comment
У вас должна быть возможность вызвать FX.importStylesheet () - person Edvin Syse; 15.01.2018
comment
хм ... может я что-то упускаю, но как мне получить экземпляр FX? У меня есть доступ к сопутствующему объекту, но функция importStylesheet не является статической ... свойство styleSheet доступно, и я скопировал функцию importStylesheet для регистрации таблицы стилей на основе dsl, но это не сработало (таблица стилей игнорировалась во время выполнения) - person Marco; 15.01.2018