2017-09-23 30 views
0

示例是stage中的3個節點:button,colorpicker和comboBox(用於更改文本大小)。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"); 

顏色拾取將由客戶改變按鈕的背景顏色,以及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