webentwicklung-frage-antwort-db.com.de

hinzufügen von CSS-Dateien zu Stylesheets in Javafx

Sprache: JavaFX

IDE: Netbeans

Problem: Ich versuche, eine CSS-Datei zum Stylesheet hinzuzufügen, aber die erste Zeile des folgenden Codes generiert immer eine NullPointerException:

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

Ich habe versucht, "double_slider.css" durch den vollständigen Pfad zu ersetzen. double_slider.css befindet sich derzeit in demselben Paket wie die Klasse, die diesen Aufruf durchführt. Ich habe auch alle Varianten ausprobiert, die unter http://introjava.wordpress.com/2012/03/21/linking-a-css-style-sheet-to-javafx-scene-graph/ gefunden werden ohne erfolg. Clean and Build hilft auch nicht.

Wenn ich die CSS-Datei im Build-Ordner ablege, in dem die .class-Dateien abgelegt werden, geht die NullPointerException weg. Die CSS-Datei funktioniert jedoch nicht ordnungsgemäß, da sie auf andere Dateien in meinem Projekt verweist.

11
Danielle

legen Sie Ihre yourname.css-Datei direkt im Verzeichnis src ab.

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

sauber und bauen erforderlich

13
nikolaos

Ich denke, Ihnen fehlen die Schrägstriche, was dazu führt, dass die CSS-Datei nicht gefunden werden kann. Versuchen Sie, Ihre Pfadangabe zu korrigieren.

Zum Beispiel:

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

wäre: 

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

Ich hatte das gleiche problem Ich verwende NetBeans 7.3 und JavaFX 2.2.7, JDK 7.0_21 auf Win7.

Meine Lösung bestand darin, die CSS-Datei in den Ordner SAME zu verschieben, der die Java-Datei void start (Stage stage) enthält. Die Projektansicht sieht also so aus:

  • Projektname
    • Quellpakete
      • pkgWhatever
        • Main.Java
        • MyCssFile.css

(Die CSS-Datei ist also IN das Paket, das ich wirklich seltsam und kontraintuitiv finde. Ein Dokument hat mir gesagt, ich solle es im Stammverzeichnis des Projekts ablegen, damit es zur Laufzeit gefunden werden kann, aber das hat in NB nicht funktioniert. Meine App wird jetzt ausgeführt, unabhängig davon, ob ich die Datei mit "start (..)" durch Drücken von starte Ctrl+U oder klicken Sie im Kontextmenü des Projekts auf Ausführen. Und es ist egal, ob ich NB alles in ein JAR stecken lasse oder nicht.)

Hier ist der Code, der das CSS in der obigen Situation lädt:

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

Während dies nicht funktioniert hat:

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

Hoffe das hilft.

7
JBR

Ich hatte das gleiche Problem (in NetBeans 8). Ich habe hier eine Lösung gefunden: https://blog.idrsolutions.com/2014/04/use-external-css-files-javafx/

Meine Ressourcendatei spreadsheet.css war hier:

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

In mainView.Java:

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

Hoffe das hilft.

3
fanatek

Sie können Ihre style.css-Datei direkt in Ihrer .fxml-Datei als Attribut zu Ihrem Stammelement hinzufügen, wenn diese Stylesheets = "@ your_relative_path/style.css" ist.

Sie können @ ../style.css verwenden, wenn Sie auf die CSS-Datei zugreifen möchten, die sich in Ihrem SRC-Ordner befindet

2
user5857068

Ich habe ein kleines Login-Beispiel erstellt und so verbinde ich meine styleshet.css

@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("LoginUI.fxml"));


    Scene scene = new Scene(root);

    scene.getStylesheets().add(JavaFXLogin.class.getResource("stylesheet.css").toExternalForm());

    stage.setScene(scene);
    stage.show();

}

Sie können diese Codezeile verwenden, um Ihre CSS-Datei zu verknüpfen. Die CSS-Datei sollte sich jedoch in Ihrem Paket befinden.

scene.getStylesheets().add(JavaFXLogin.class.getResource("stylesheet.css").toExternalForm());

1

Betrachten Sie Ihren alten Code:

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

Versuchen Sie es in diesem neuen Code zu ändern und es wird funktionieren:

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

Wenn Sie getClass() verwenden, müssen Sie das this-Schlüsselwort nicht verwenden.

Ich hoffe das funktioniert für dich. :)

1
ayoub soso

Haben Sie das Szenenobjekt vor dem Festlegen des Stylesheets initialisiert?

szene = neue Szene (myRootLayout, 600, 600); // zum Beispiel

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

oder

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

aber danach:

Projekt ausführen/bereinigen und erstellen

arbeitete für mich

NetBeans IDE 8.2; Java: 1.8.0_201; Linux 16.04

0
Pacho

Hmmm, bist du auf Netbeans? Versuchen Sie " Clean and Build " das Projekt.

0
Uluk Biy

Angenommen, die Dateistruktur sieht etwa so aus:
-Wurzel
-- src
---Ressourcen
---- double_slider.css
---Paket
---- JavaFXFile.Java

Das hat bei mir funktioniert:

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

Ordnerstruktur

In der MedicalLibraryFx.Java 

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

Ordnerstruktur, wenn sich css im selben Verzeichnis befindet wie Controller

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

Versuchen Sie, den Namen der Datei mit '@' zu versehen. Es hat bei mir funktioniert.

beispiel: '@ main.css'

0
Henrique Dias

Allen Antworten fehlt ein sehr wichtiger Teil, und das ist '/' vor dem Namen der CSS-Datei:

Ordnerstruktur:

src
  resources
    stylesheet.css

Lade es so, beachte den beginnenden Schrägstrich vor der CSS-Datei:

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

Es ist ziemlich einfach.

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

Das hat für mich funktioniert-

0
manudroid19

in deiner Datei .Java benutze diese 

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