2016-12-27 2 views
0

私はカスタムボタンコントロールを開発しています。コードは非常に簡単です。私はMyButtonクラスの拡張ボタンクラスを作成するだけです。そして私は同じファイルにCSSを追加します。このjarファイルをcssファイルでシーンビルダにインポートするには? (CSSファイルは適用されません)

public class PrimaryButton extends Button { 
public PrimaryButton(){ 
    getStyleClass().add("primary-button"); 
    getStylesheets().add("primarybutton.css"); 
    } 
} 

のように私のプロジェクトの構造は、私はジャーに、このプロジェクトファイルを作っthis.

です。そして、私はこの瓶をシーンビルダーにインポートします。しかし、CSSは適用されません。 like this。なにが問題ですか?

答えて

0

私はこの問題は、あなたのCSSファイルのパスにしていると思う、と私は

getStylesheets().add("sample/primarybutton.css"); 

に、それを変更したときにそれがうまく働いた、とこれも細かい

getStylesheets().add("/sample/primarybutton.css"); 

NOTEを働きました:私のアプリケーションアーキテクチャはあなたのものと全く同じです

ここに完全なサンプル

public class MyButton extends Button { 
public MyButton(){ 
    getStylesheets().add("sample/primarybutton.css"); 
    //you can also use this 
    //getStylesheets().add("/sample/primarybutton.css"); 
    getStyleClass().add("primary-button"); 
} } 

注: "主ボタン" されるcssクラスあなたの "primarybutton.css" ファイルで、これは便利です

希望、そしてあなたの問題を解決

+0

ありがとうございます。しかし、私はその方法を試みました、私は問題を解決できませんでした。 – rlawlstjd007

0

文字列あなたはスタイルシートのリストに渡され、URLとして扱われます。 documentationの状態は、

です。URLは、[scheme:] [// authority] [path]という形式の階層URIです。 URLに[scheme:]コンポーネントがない場合、URLは が[パス]コンポーネントのみと見なされます。 [path]の先頭の '/'文字は無視され、[path]はアプリケーションのクラスパスの ルートに対する相対パスとして扱われます。

クラスとスタイルシートの両方がsampleパッケージ内にあるので、クラスパスにスタイルシートの相対URLがsample/primarybutton.cssで、あなたが利用したい場合は、

getStylesheets().add("sample/primarybutton.css"); 

を使用することができますので、実際には、スタイルシートはクラスと同じパッケージ内にあり、コードを移植性の高いものにします(つまり、パッケージ名をハードコードしない)、現在のクラスから完全なURLを作成して文字列に変換することができます:

getStylesheets().add(getClass().getResource("primarybutton.css").toExternalForm()); 

getClass().getResource(...)は、先頭に/で始まらないリソース名が現在のクラスとの相対的なものとして解釈されるため、URLを作成するためです。

私は一般的に後者のアプローチを好んでいますが、他のアプローチは同意しないかもしれません。

+0

'toExternalForm()'とは何ですか? – rlawlstjd007

+0

URLを外部形式、つまりコンテキストに依存しない形式に変換します。 –

+0

ありがとう、とても素晴らしいです! – rlawlstjd007

関連する問題