2017-09-23 4 views
0

例:ボタン、colorpicker、comboBoxの3ノードです(テキストサイズの変更用)。javafxは頻繁にCSSによって変更されないノードのスタイルを変更します

Button btn = new Button("Change color and size"); 
ColorPicker colorpicker = new ColorPicker(); 
ComboBox sizebox = new ComboBox(); 
sizebox.getItems().addAll("13", "15", "16", "17", "18", "19", "20", "22"); 

ColorPickerは顧客のボタンの背景色を変更し、sizeboxは顧客ごとにテキストサイズを変更します。私はサイズ、ジャストサイズ変更後にデフォルトに削除されますカラーピッカーで設定された現在の色を設定するために、次にカラーピッカーで色を設定するとき

colorpicker.setOnAction(e-> btn.setStyle("-fx-background- color:#"+Integer.toHexString(colorpicker.getValue().hashCode()))); 
sizebox.setOnAction(e-> btn.setStyle("-fx-font-size:"+sizebox.getValue().toString()));` 

現在の結果があります。どうすればこの機能を実現できますか?

シーンビルドのように、「テキストの塗りつぶし」は何度も変更できますが、サイズには影響しません。サイズを変更しても「テキストの塗りつぶし」には影響しません。

Scene Builder

答えて

1

それは両方のコントロールの値に依存し、一つだけ変更しても、それらの両方からスタイルを再計算バインディングの作成:

Button btn = new Button("Change color and size"); 
ColorPicker colorpicker = new ColorPicker(); 
ComboBox sizebox = new ComboBox(); 
sizebox.getItems().addAll("13", "15", "16", "17", "18", "19", "20", "22"); 

btn.styleProperty().bind(Bindings.createStringBinding(() -> { 
    Color color = colorpicker.getValue(); 
    Object size = sizebox.getValue(); 

    String style = color == null ? "" : "-fx-background-color:#" + Integer.toHexString(color.hashCode()); 
    return size == null ? style : style + ";-fx-font-size:" + size; 
}, colorpicker.valueProperty(), sizebox.valueProperty())); 
+0

はそれは非常にいいアイディアだとそれが動作します。ありがとう。 –

+0

@ A.Sheh:左の[空のチェックマーク](http://meta.stackoverflow.com/a/5235/163188)をクリックすると、この回答を受け入れることができます。 – trashgod

関連する問題