web-dev-qa-db-ja.com

javafxのスタイルシートにCSSファイルを追加する

言語: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 / 、成功しませんでした。クリーンアップとビルドはどちらも役に立ちません。

.classファイルがダンプされるビルドフォルダーにcssファイルを配置すると、NullPointerExceptionがなくなります。しかし、cssファイルはプロジェクト内の他のファイルを参照しているため、正しく機能しません。

14
Danielle

あなたのyourname.csssrcディレクトリ直下のファイル。

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

クリーンでビルドが必要

18
nikolaos

CSSファイルが見つからない原因となるスラッシュがないと思います。パス参照を修正してください。

例えば:

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

だろう:

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

私も同じ問題を抱えていました。 Win7ではNetBeans 7.3とJavaFX 2.2.7、JDK 7.0_21を使用しています。

私の解決策は、.cssを[〜#〜] same [〜#〜]フォルダーに配置することでした。私のJavaを含むファイルvoid start(ステージステージ)。したがって、プロジェクトビューは次のようになります。

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

お役に立てれば。

8
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("\\", "/"));

お役に立てれば。

4
fanatek

小さなログインの例を作成しました。これが私の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();

}
_

このコード行を使用してcssファイルをリンクできます。ただし、cssファイルはパッケージ内にある必要があります。

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

2

このstylesheets = "@ your_relative_path/style.css"として、.fxmlファイルにルート要素の属性としてstyle.cssを直接追加できます。

Srcフォルダーにあるcssファイルにアクセスする場合は、@ ../style.cssを使用できます。

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

スタイルシートを設定する前にシーンオブジェクトを初期化しましたか?

scene = new Scene(myRootLayout、600、600); // 例えば

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

または

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

しかしその後:

プロジェクトの実行/クリーンおよびビルド

私のために働いた

NetBeans IDE 8.2; Java:1.8.0_201; Linux 16.04

0
Pacho

うーん、あなたはNetbeansを使っていますか? "Clean and Build"プロジェクトを試してください。

0
Uluk Biy

ファイル構造が次のようなものであると想定します。
-ルート
-src
---リソース
---- double_slider.css
- -パッケージ
---- JavaFXFile.Java

これは私のために働いたものです:

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

フォルダ構造

MedicalLibraryFx.Java

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

cssがコントローラーと同じディレクトリにある場合のフォルダー構造

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

ファイル名に「@」を付けてみてください。それは私のために働いた。

例: '@ main.css'

0
Henrique Dias

すべての回答に1つの非常に重要な部分がありません。それはcssファイルの名前の前の「/」です。

フォルダー構造:

src
  resources
    stylesheet.css

次のようにロードし、cssファイルの前に開始スラッシュを確認します。

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

とてもシンプルです。

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

これは私のために働いたものです-

0
manudroid19

ファイル内。Javaこれを使用

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