Я не могу установить "-fx-text-fill: white" для внешнего css для стиля Текст, вложенный в GridPane, вложенный в Аккордеон в JavaFX - PullRequest
0 голосов
/ 24 марта 2019

Я искал в интернете и просил многих помочь с этой проблемой.Я пытаюсь установить «-fx-text-fill» для компонента Text, вложенного в Girdpane, вложенного в TitledPane, вложенного в аккордеон для Javafx.Я хочу стилизовать текст (и другие вещи, такие как компонент метки), поскольку аккордеон представляет собой динамически обновляемый список.Ничего из того, что я делаю, не работает.

Я попытался отредактировать таблицу стилей с помощью: text.setStyle ();и я попытался добавить css в файл css, который правильно связан.

Java-код для заполнения аккордеона:

private void populateAccordion(){
        final String[] imageNames = new String[]{"Discord 1", "Discord 2", "Discord 3"};
        final TitledPane[] tps = new TitledPane[imageNames.length];
        for (int i = 0; i < imageNames.length; i++) {
            GridPane grid = new GridPane();
            grid.setVgap(4);
            grid.setPadding(new Insets(5, 5, 5, 5));
            Text infractions = new Text("Infractions: ");
            Text zero = new Text("0");
            zero.setStyle("-fx-text-fill: white");
            grid.add(infractions, 0, 0);
            grid.add(zero, 1, 0);
            grid.add(new Label("Cc: "), 0, 1);
            grid.add(new TextField(), 1, 1);
            grid.add(new Label("Subject: "), 0, 2);
            grid.add(new TextField(), 1, 2);
            System.out.println("Printing css of grid");
            grid.getStyleClass().forEach(System.out::println);
            System.out.println("All done!");
            tps[i] = new TitledPane(imageNames[i],grid);
            tps[i].getChildrenUnmodifiable().forEach(child -> {
                System.out.print(child.getId());
            });
        }

Css-код для оформления текста в аккордеоне:

.accordion > .titled-pane > .content >  GridPane{
    -fx-text-fill: white;
}

.scroll-pane > .accordion > .titled-pane > .content > GridPane{
    -fx-text-fill: white;
}

.titled-pane > .content > GridPane{
    -fx-text-fill: white;
}

Результат: https://gyazo.com/225a65f0123e82a3b6e818d47afc760c

Ожидаемый результат: текст для: "правонарушения: 0", "cc" и "subject" должен быть белым. Мне интересно, есть ли сайт, посвященныйчтобы показать структуру элементов JavaFX, чтобы я мог легко увидеть структуру этих элементов и соответственно стилизовать их.Я пробовал следующий сайт: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html#labeled А также modena.css, который используется по умолчанию: https://gist.githubusercontent.com/maxd/63691840fc372f22f470/raw/e526d5c54bd145c58409ad3a2b8acb77d90dcbe5/modena.css

1 Ответ

1 голос
/ 24 марта 2019

Первая проблема - ваши infractions и zero - Text, а не Label.Если вы посмотрите Справочное руководство по JavaFX CSS , вы увидите, что свойство -fx-text-fill определено для:

Узел Text не является ни Labeled, ни TextInputControl.Документация CSS , кажется, не проясняет это, но Text простирается от Shape и поэтому имеет свойства из Shape.Чтобы изменить цвет текста узла Text, вы должны использовать -fx-fill.В качестве альтернативы вы можете вызвать text.setFill(...) в коде Java.

Я также считаю, что вам нужно нацелиться на Label s и Text специально из файла CSS.Вы можете дать свой Label уникальный класс стилей, такой же, как у Text, и использовать его из таблицы стилей.Что-то вроде:

.white-label {
    -fx-text-fill: white;
}

.white-text {
    -fx-till: white;
}

Добавление класса стиля выглядит следующим образом:

label.getStyleClass().add("white-label");
text.getStyleClass().add("white-text");

При необходимости вы все равно можете сделать выбор более конкретным (т. Е. .titled-pane > .content > etc...).


Относительно вашего вопроса об инструменте (ах) для просмотра структуры графа сцены, когда такой инструмент будет Scenic View .Убедитесь, что вы загружаете правильную версию для использования с вашей версией Java.Вы также можете использовать CSS-анализатор Scene Builder .Чтобы показать анализатор, перейдите в «Вид» → «Показать CSS Analyzer» (или Ctrl + 6 в Windows).

...