Quel est le problème avec ma syntaxe appelant une feuille de style (css) à partir d'un fichier FXML ?

StackOverflow https://stackoverflow.com//questions/22043650

  •  21-12-2019
  •  | 
  •  

Question

Je travaille sous NetBeans 8, avec Java 8 / JavaFX et FXML.

Dans le premier contrôleur (un AnchorPane) de mon document FXML, j'ai ceci qui fonctionne :

stylesheets="file:///C:/Users/me/Documents/NetBeansProjects/MyApp/src/myApp/myStyle.css"

Cependant, lorsque j'essaie de le remplacer par n'importe quel type de chemin relatif, j'obtiens l'erreur suivante au moment de l'exécution :

com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged
WARNING: Resource "myStyle.css" not found.

J'ai essayé

stylesheets="myStyle.css"
stylesheets="file://myStyle.css"
stylesheets="./myStyle.css"
stylesheets="css/myStyle.css"

(où j'ai mis une copie du fichier CSS dans un sous-répertoire d'où il se trouvait)

... et peut-être 50 autres permutations.Chaque fois, j'obtiens la même erreur.

La raison pour laquelle je m'en soucie est que j'ai un deuxième problème.Dans la première version, cela fonctionne sur ma machine...lorsque j'emporte mon fichier jar sur une autre machine, le CSS n'est pas appliqué lors de l'exécution de l'application...C'est comme si le fichier de ressources n'était pas copié.

Aide?

Merci!

-Adéena

Était-ce utile?

La solution

Permettez-moi de considérer votre structure de projet comme suit

MyApp
  |
  |_ src
      |
      |_controllers (Controllers)
      |_view (FXML)
      |_style (css)
          |_myStyle.css

Vous pouvez spécifier le chemin relatif dans la FXML en utilisant

<stylesheets>
   <URL value="@../style/myStyle.css" />
</stylesheets>

Dans votre contrôleur, vous pouvez l'ajouter comme suit

layout.getStylesheets().add(getClass().
         getResource("/style/myStyle.css")).toExternalForm();

Autres conseils

Voici comment cela fonctionne pour moi :

<?import java.net.*?>

<fx:root type="javafx.scene.layout.BorderPane" ... xmlns:fx="http://javafx.com/fxml">
  <stylesheets>
    <URL value="@myStyle.css" />
  </stylesheets>
</fx:root>

Le fichier CSS se trouve dans le même package (dossier) que FXML.Il se trouve aussi que ma racine est <fx:root>, je m'attends à ce que cela fonctionne de la même manière pour votre <AnchorPane>.

Vérifiez documents, recherchez « Résolution de localisation » pour plus de détails.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top