Добавление файла css в таблицы стилей в javafx

Язык: JavaFX

IDE: Netbeans

Проблема: я пытаюсь добавить файл css в таблицу стилей, но первая строка следующего кода всегда генерирует NullPointerException:

String css = this.getClass().getResource("double_slider.css").toExternalForm(); 
scene.getStylesheets().add(css);

Я попытался заменить "double_slider.css" на полный путь. double_slider.css в настоящее время находится в том же пакете, что и класс, который делает этот вызов. Я также попробовал все варианты, найденные на http://introjava.wordpress.com/2012/03/21/linking-a-css-style-sheet-to-javafx-scene-graph/, но безуспешно. Очистить и построить тоже не поможет.

Если я помещаю файл css в папку сборки, в которую сохраняются файлы .class, исключение NullPointerException исчезнет. Но тогда файл CSS не работает должным образом, потому что он ссылается на другие файлы в моем проекте.

Ответ 1

поместите ваш файл yourname.css непосредственно в каталог src.

scene.getStylesheets().add("yourname.css")

очистить и построить требуемый

Ответ 2

Я думаю, что у вас отсутствует косая черта, из-за чего файл CSS не найден. Попробуйте исправить ссылку на путь.

Например:

-root
--app/Main.java
--assets/double_slider.css

:

String css = this.getClass().getResource("/assets/double_slider.css").toExternalForm();

Ответ 3

У меня была та же проблема. Я использую NetBeans 7.3 и JavaFX 2.2.7, JDK 7.0_21 на Win7.

Мое решение состояло в том, чтобы поместить .css в папку SAME в качестве моего файла Java, содержащего void start (Stage stage). Таким образом, представление Project выглядит так:

  • ProjectName
    • Исходные пакеты
      • pkgWhatever
        • Main.java
        • MyCssFile.css

(Таким образом, файл CSS - это IN пакет, который я нахожу действительно странным и противоречивым. Некоторые документы сообщили мне, чтобы я поместил его в корень проекта, чтобы его можно было найти во время выполнения, но это не работает для меня в NB. Теперь мое приложение запускается независимо от того, начинаю ли я файл, содержащий " start (..)", нажав Ctrl + U или нажав "Выполнить" на контекстное меню проекта. И не имеет значения, допустил ли я, чтобы NB поместил все в JAR или нет.)

Вот код, который загружает CSS в приведенной выше ситуации:

  URL url = this.getClass().getResource("controlStyle1.css");
    if (url == null) {
        System.out.println("Resource not found. Aborting.");
        System.exit(-1);
    }
    String css = url.toExternalForm(); 
    scene.getStylesheets().add(css);

В то время как это не сработало:

    scene.getStylesheets().add("controlStyle1.css");

Надеюсь, что это поможет.

Ответ 4

У меня была та же проблема (в NetBeans 8). Я нашел решение здесь: https://blog.idrsolutions.com/2014/04/use-external-css-files-javafx/

Мой файл ресурсов spreadsheet.css был здесь:

MyApp
-resources
--spreadsheet.css
-source packages
--fr.ccc.myapp.view
---mainView.java
---FXMLMain.fxml

В mainView.java:

File f = new File("resources/spreadsheet.css");
spreadsheet.getStylesheets().add("file:///" + f.getAbsolutePath().replace("\\", "/"));

Надеюсь, что это поможет.

Ответ 5

Вы можете добавить свой style.css непосредственно в ваш .fxml файл как атрибут вашего корневого элемента, так как это stylesheets = "@your_relative_path/style.css".

Вы можете использовать @../style.css, если хотите получить доступ к файлу css, находящемуся в папке src

Ответ 6

Учитывая ваш старый код:

String css =this.getClass().getResource("double_slider.css").toExternalForm(); 
scene.getStylesheets().add(css);

Попробуйте изменить его на новый код, и он будет работать:

screen.getStylesheets().add(getClass().getResource("double_slider.css").toExternalForm());

Когда вы используете getClass(), вам не нужно использовать ключевое слово this.

Я надеюсь, что эта работа для вас.:)

Ответ 7

Хммм, ты на Netbeans? Попробуйте "Очистить и построить" проект.

Ответ 8

Вы инициализировали объект сцены до установки таблицы стилей?

scene = новая сцена (myRootLayout, 600, 600);//например

Ответ 9

Это довольно просто.

this.scene.setUserAgentStylesheet(/resources/blabla.css);

Это то, что сработало для меня -

Ответ 10

в вашем файле .java используйте этот

Application.setUserAgentStylesheet(getClass().getResource("application.css")
                .toExternalForm());

Ответ 12

Предполагая, что структура файла выглядит примерно так:
-root
--src
---resources
----double_slider.css
---package
----JavaFXFile.java

Вот что сработало для меня:

scene.getStylesheets().add((new File("src/resources/double_slider.css")).toURI().toString());

Ответ 13

scene.getStylesheets().add("file:///home/fullpathname/file.css");

или же

scene.getStylesheets().add("file:/home/fullpathname/file.css");

но после:

Выполнить/очистить и построить проект

работал на меня

IDE NetBeans 8.2; Java: 1.8.0_201; Linux 16.04

Ответ 14

Во всех ответах пропущена одна очень важная часть и знак " / " перед именем файла CSS:

Структура папки:

src
  resources
    stylesheet.css

Загрузите это так, обратите внимание на начальный слеш перед файлом CSS:

scene.getStylesheets().add(getClass().getResource("/stylesheet.css").toExternalForm())

Ответ 15

Попробуйте поставить "@" в имени файла. Это сработало для меня.

например: '@main.css'

Ответ 16

.root {
/* background color for selected checkbox */
-fx-background-color:white;
 }
.check-box:selected > .box {
/* background color for selected checkbox */
-fx-background-color: lime;
 }

.check-box > .box {
/* background color of unselected checkbox */
-fx-background-color:grey;
 }

.check-box:selected > .box > .mark,
.check-box:indeterminate  > .box > .mark {
/* modify mark color */
-fx-background-color: blue;
 }