it-swarm.com.ru

добавление файла 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 не работает должным образом, потому что он ссылается на другие файлы в моем проекте.

11
Danielle

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

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

очистить и построить требуется

13
nikolaos

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

Например:

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

было бы: 

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

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

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

  • Название проекта
    • Исходные пакеты
      • 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");

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

7
JBR

У меня была такая же проблема (в 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("\\", "/"));

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

3
fanatek

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

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

2
user5857068

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

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

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

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

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

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

1
ayoub soso

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

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

0
medokr

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

0
Uluk Biy

Предполагая, что структура файла выглядит примерно так:
- корень
-- ЦСИ
---Ресурсы
---- double_slider.css
--- пакет
---- JavaFXFile.Java

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

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

Структура папок

В медицинской библиотеке FX.Java 

scene.getStylesheets().add(getClass().getResource("/css/style.css").toString()); 

Структура папки, когда css находится в том же каталоге, что и контроллер

scene.getStylesheets().add(getClass().getResource("style.css").toString());
0
Jolaade Adewale

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

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

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

0
manudroid19

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

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