web-dev-qa-db-fra.com

ajout de fichier css à des feuilles de style dans javafx

Langue: JavaFX

IDE: Netbeans

Problème: j'essaie d'ajouter un fichier CSS à la feuille de style, mais la première ligne du code suivant génère toujours un NullPointerException:

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

J'ai essayé de remplacer "double_slider.css" par le chemin complet. double_slider.css se trouve actuellement dans le même package que la classe qui effectue cet appel. J'ai également essayé toutes les variantes trouvées sur http://introjava.wordpress.com/2012/03/21/linking-a-css-style-sheet-to-javafx-scene-graph/ , sans succès. Nettoyer et construire n'aide pas non plus.

Si je place le fichier css dans le dossier de construction où les fichiers .class sont vidés, l’exception NullPointerException disparaît. Mais le fichier css ne fonctionne pas correctement car il fait référence à d’autres fichiers de mon projet.

11
Danielle

placez votre fichier yourname.css directement dans le répertoire src .

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

nettoyer et construire requis

13
nikolaos

Je pense que vous avez oublié les barres obliques qui empêchent de trouver le fichier CSS. Essayez de corriger votre référence de chemin.

Par exemple:

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

serait: 

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

J'ai eu le même problème. J'utilise NetBeans 7.3 et JavaFX 2.2.7, JDK 7.0_21 sur Win7.

Ma solution a été de placer le fichier .css dans le dossier MÊME en tant que fichier Java contenant void start (Stage stage). Donc, la vue du projet ressemble à ceci:

  • Nom du projet
    • Paquets source
      • pkgQue ce soit
        • Main.Java
        • MyCssFile.css

(Ainsi, le fichier CSS est IN le paquet, que je trouve vraiment bizarre et contre-intuitif. Un doc m'a dit de le mettre à la racine du projet pour le trouver au moment de l'exécution, mais ne fonctionnait pas pour moi dans le Nouveau-Brunswick. Mon application fonctionne maintenant, que je démarre ou non le fichier contenant "start (..)" en appuyant sur Ctrl+U ou en cliquant sur Exécuter dans le menu contextuel du projet. Et peu importe si je laisse NB tout mettre dans un fichier JAR ou non.)

Voici le code qui charge le CSS dans la situation ci-dessus:

  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);

Considérant que cela n'a pas fonctionné:

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

J'espère que cela t'aides.

7
JBR

J'ai eu le même problème (dans NetBeans 8). J'ai trouvé une solution ici: https://blog.idrsolutions.com/2014/04/use-external-css-files-javafx/

Mon fichier de ressources spreadsheet.css était ici:

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

Dans mainView.Java:

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

J'espère que cela t'aides.

3
fanatek

Vous pouvez ajouter votre style.css directement dans votre fichier .fxml en tant qu'attribut de votre élément racine, comme ceci stylesheets = "@ your_relative_path/style.css".

Vous pouvez utiliser @ ../style.css si vous souhaitez accéder au fichier CSS situé dans votre dossier src.

2
user5857068

Compte tenu de votre ancien code:

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

Essayez de le changer pour ce nouveau code et cela fonctionnera:

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

Lorsque vous utilisez getClass(), vous n'avez pas besoin d'utiliser le mot clé this.

J'espère que ce travail pour vous. :)

1
ayoub soso

Avez-vous initialisé l'objet scène avant de définir la feuille de style?

scène = nouvelle scène (myRootLayout, 600, 600); // par exemple

0
medokr

Hmmm, êtes-vous sur Netbeans? Essayez de " Nettoyer et construire " le projet.

0
Uluk Biy

En supposant que la structure du fichier ressemble à ceci:
-racine
-- src
---Ressources
---- double_slider.css
---paquet
---- JavaFXFile.Java

C'est ce qui a fonctionné pour moi:

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

Structure des dossiers

Dans le MedicalLibraryFx.Java 

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

Structure des dossiers lorsque css se trouve dans le même répertoire que le contrôleur

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

C'est assez simple.

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

C'est ce qui a fonctionné pour moi-

0
manudroid19

dans votre fichier .Java use this 

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