2017-12-24 6 views
0

私はプログレスバーコントロールのカスタムプロパティを作成しようとしています。Javaコードからスタイルを変更してプログレスバーの色を変更しようとしましたが、setStyle(".bar {-fx-background-color:" + value + ";}");メソッドを使用すると色が変わりません。他のメソッドsetColor(value)同じ結果となり、色は変化しません。Javaコードから進捗色を変更するにはどうすればよいですか?

これは私のJavaコードです:

private final ObjectProperty<Paint> Color = new SimpleObjectProperty<>(this, "Color", Paint.valueOf("#0057e7")); 

public Paint getColor() { 
    return Color.get(); 
} 

public void setColor(Paint value) { 

    Color.set(value); 
    /*When the user change the property value ,it was sending for make chainging in css*/ 
    changeColor(value);//send changed value 

} 

public ObjectProperty ColorProperty() { 
    return Color; 
} 

private static final String USER_AGENT_STYLESHEET = superfx.SuperFx.class.getResource("/stylesheets/style.css").toExternalForm(); 
private static final String DEFALUT_STYLE_CLASS = "super-fx-qntm-progress-bar"; 

@Override 
public String getUserAgentStylesheet() { 
    return USER_AGENT_STYLESHEET; 
}  

public SuperFXFQProgressBar() { 
    defaultStyle(); 
    idenfinite(); 

} 

public SuperFXFQProgressBar(double progress) { 

    super(progress); 
    defaultStyle(); 
    idenfinite(); 

} 

private void defaultStyle() { 

    this.setMinHeight(10); 
    this.setPrefHeight(10); 
    getStylesheets().add(USER_AGENT_STYLESHEET); 
    getStyleClass().add(DEFALUT_STYLE_CLASS); 

} 

private void idenfinite() { 
    setProgress(ProgressBar.INDETERMINATE_PROGRESS); 
} 

private void changeSpeed(double value) { 
    this.setStyle("\n" 
      + " -fx-indeterminate-bar-animation-time:" + value + ";"); 
} 

/*My problem here*/ 

private void changeColor(Paint value) { 
    /*How can i change the bar color from here*/ 
    this.setStyle("\n" 
      + " .bar {-fx-background-color:" + value + ";}"); /*this line does not five any effect*/ 

} 

これは私のCSSです:

.super-fx-qntm-progress-bar { 

    -fx-background-color: transparent; 
    -fx-indeterminate-bar-animation-time:1.0; 
    -fx-indeterminate-bar-flip:true; 
    -fx-indeterminate-bar-escape:true; 
    -fx-indeterminate-bar-length:10; 
    -fx-min-height:5; 
} 

.super-fx-qntm-progress-bar .track{ 

    -fx-background-color: transparent; 
    -fx-border-radius:20; 
    -fx-background-radius:20; 

} 

.super-fx-qntm-progress-bar .bar { 

    -fx-background-color: #0057e7; 
    -fx-background-insets: 1 1 1 3, 1 1 1 1, 1 1 2 3; 
    -fx-border-radius:50; 
    -fx-background-radius:50; 


} 

答えて

1

あなたのプログレスバーの「ルックアップ色」の定義:essntiallyその後、あなたはJavaで必要なすべてを

.super-fx-qntm-progress-bar .bar { 

    -fx-background-color: -bar-color ; 
    -fx-background-insets: 1 1 1 3, 1 1 1 1, 1 1 2 3; 
    -fx-border-radius:50; 
    -fx-background-radius:50; 


} 

:その後、

.super-fx-qntm-progress-bar { 

    -bar-color: #0057e7; 
    /* existing code ... */ 
} 

、バーの色のためにそれを使用しますコードは、あなたは、単ににtoString()を呼び出すことはできません、しかし

this.setStyle("-bar-color: "+value+";"); 

です3210オブジェクト:適切にフォーマットする必要があります。だから、何かの操作を行います。) `Color.toString(のマニュアルを

private String formatColor(Color c) { 
    int r = (int) (255 * c.getRed()); 
    int g = (int) (255 * c.getGreen()); 
    int b = (int) (255 * c.getBlue()); 
    return String.format("#%02x%02x%02x", r, g, b); 
} 

をしてから

this.setStyle("-bar-color: "+formatColor((Color)value)+";"); 
+0

完璧な答えです。ありがとうございます@ James_D。 –

-1

あなたがいることを知っている必要があります:CSSスタイルが来ることができる

f ROMスタイルシートまたはインラインスタイル。スタイルシート は、Sceneオブジェクト のgetStylesheetsプロパティで指定されたURLからロードされます。シーングラフにコントロールが含まれる場合、デフォルトの ユーザエージェントスタイルシートがロードされます。インラインスタイルは、 ノードのsetStyle APIを使用して指定します。インラインスタイルは、HTML要素のstyle = "..." 属性に似ています。シーンのスタイル から読み込まれたスタイルは、ユーザーエージェントスタイルシートのセレクタよりも優先されます。 インラインスタイルは、別の場所で作成されたスタイルよりも優先されます。スタイルセレクタの 優先順位は、スタイル宣言で "!important" を使用して変更できます。

どういう意味ですか?

setStyle ("selector { property:value"}を使用してセレクタにアクセスできないことを意味します。このメソッドのプロパティと値のみを追加します.setStyleのjavadocを読んだ場合、このメソッドのパラメータはnodeのCSSスタイルを表します。私たちは私たちのスタイルを追加し、その後のプログレスバーの要素を棒にアクセスも、このコードを使用することにより

Node bar = this.lookup(".bar"); 

:あなたのケースであなたは、内側の要素(.BAR)を検索するlookup()を使用する必要があります。

bar.setStyle("-fx-background-color:" + value); 

しかし、私はあなたが

Paint valueからColor property

private void changeColor(Paint value) { 
    /*How can i change the bar color from here*/ 
    this.setStyle("\n" 
      + " .bar {-fx-background-color:" + value + ";}"); /*this line does not five any effect*/ 

} 
を得ることを見て、私はあなたが Color documentationPaint documentationを確認するため、場合は、値の問題を抱えているだろうと思い、私は、この行の Paint valueを試験したとき、 Paint.valueOf("#0057e7")結果が 0x0057e7ffであることは、メソッドの戻り値が 0xで始まり、cssが CSS GUIDEに従ってこの値を認識できないことを意味するので、 0xをこのような #

bar.setStyle("-fx-background-color:" + value.toString().replace("0x", "#")); 

は、 "JavaFXのカスケーディング・スタイル・シート" をuderstandするJavaFX CSS Reference Guideのすべてのコンテンツを読んでみてください。

+0

'任意の特定の実装を持つことに依存していないかを示します。 –

+0

@Xint Xmsあなたの答えは働いています。ありがとうございます。 –

+0

@James_D私はあなたを理解していません –

関連する問題