Типичная безопасная таблица стилей для ячейки табличных представлений в зависимости от условия - PullRequest
1 голос
/ 07 марта 2019

У меня есть следующий код, чтобы определить табличное представление с определенными ячейками, меняющими цвет в зависимости от условия.

Как определить класс таблиц стилей SafeSafe и применить его к текущему коду, предотвращая дублирование в будущем?

class MonitorView : View("Monitor") {
    override val root = borderpane {
        center = tableview<ServerModel> {
            items = readConfiguration().observable()
            readonlyColumn("Environment", ServerModel::env)
            readonlyColumn("Host", ServerModel::host)
            readonlyColumn("Port", ServerModel::port)
            readonlyColumn("Application Name", ServerModel::appName)
            column("Is online", ServerModel::isReachable).cellFormat {
                styleDependingOnBoolean(it)
                graphic = hbox {
                    button("Restart").action {
                        isDisable = true
                    }
                }
            }
        }
    }

private fun TableCell<ServerModel, Boolean>.styleDependingOnBoolean(it: Boolean) {
    if (it) {
        style = "-fx-background-color:#00b200; -fx-text-fill:white"
        text = it.toString()
    } else {
        style = "-fx-background-color:#8b0000; -fx-text-fill:white"
        text = it.toString()
    }
}

}

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

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

class MyStyles : Stylesheet() {
    companion object {
        val reachable by cssclass()
        val connectivityColumn by cssclass()
    }

    init {
        connectivityColumn {
            backgroundColor += c("#8b0000")
        }
        connectivityColumn and reachable {
            backgroundColor += c("#00b200")
        }
    }
}

Убедитесь, что этот столбец получает класс connectivityColumn, и переключите состояние reachable с помощью toggleClass:

column("Reachable", Server::reachableProperty) {
    addClass(MyStyles.connectivityColumn)
    cellFormat {
        toggleClass(MyStyles.reachable, item)
        graphic = hbox {
            button("Restart")
        }
    }
}

Обратите внимание, что это обновляет цвет только при перерисовке таблицы.Если вам нужно обновить цвет на основе внешних событий, когда представление таблицы не перерисовывается, либо запустите событие, чтобы перерисовать его, либо используйте привязку.Если вы добьетесь успеха с первым подходом, я бы порекомендовал его, поскольку он не привязывает слушателей.

0 голосов
/ 07 марта 2019

Если я правильно понял, вы ищете что-то вроде следующего:

javafxNode.getStyleClass().add("myCssClass");
// passing true here will activate your css code below
javafxNode.pseudoClassStateChanged("myPseudoClass",yourBoolean);

В вашем файле CSS:

.myCssClass:myPseudoClass{
     -fx-text-fill:white 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...