2017-06-17 45 views
1

我倒是想申請這種風格編程:內嵌樣式繼承的JavaFX

.rating:disabled > .container:disabled .button:disabled{ 
    -fx-pref-height:15; 
    -fx-background-size: cover; 
    -fx-padding: 0; 
} 

我已經試過這一點,但不工作:

ratingHeigth.bind(mainBorderPane.prefHeightProperty().divide(0.0355)); 
    vipRating.styleProperty().bind(Bindings.concat(".rating:disabled > .container:disabled .button:disabled{ -fx-pref-height: ", ratingHeigth.asString(), ";}")); 

回答

2

這是無證行爲,據我我知道(所以你可能不想依賴它),但你可以創建一個「查找大小」,類似於「查找顏色」(已記錄)。

在你的外部CSS樣式表,做

.rating { 
    disabled-button-size: 15 ; 
} 

.rating:disabled > .container:disabled .button:disabled{ 
    -fx-pref-height: disabled-button-size ; 
    -fx-background-size: cover; 
    -fx-padding: 0; 
} 

然後用Java做

vipRating.styleProperty().bind(ratingHeight.asString("disabled-button-size: %f ;")); 

您的代碼不起作用,因爲內嵌樣式簡單地套用由字符串指定的實際風格您調用的節點setStyle(...):內聯樣式不包括選擇器。

上述解決方案中的想法是在定義所需高度的CSS文件中定義「查找大小」(一種CSS變量)。然後使用setStyle更改該「查找大小」的值。該值由子節點繼承,因此在具有rating CSS類的容器上使用setStyle就足夠了。

這是一個(更簡單)SSCCE。移動滑塊和按鈕將改變大小:

import javafx.application.Application; 
import javafx.beans.binding.Bindings; 
import javafx.beans.binding.IntegerBinding; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Slider; 
import javafx.scene.control.TextField; 
import javafx.scene.control.TextFormatter; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class LookedUpSizeTest extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Button button = new Button("Test"); 
     StackPane stack = new StackPane(button); 
     BorderPane root = new BorderPane(stack); 

     Slider sizeSlider = new Slider(30, 350, 40); 

     stack.styleProperty().bind(sizeSlider.valueProperty().asString("button-size: %f ;")); 

     root.setBottom(sizeSlider); 

     Scene scene = new Scene(root, 400, 400); 
     scene.getStylesheets().add("style.css"); 

     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

的style.css:

.root { 
    button-size: 20 ; 
} 
.button { 
    -fx-pref-height: button-size ; 
} 
+0

謝謝我的朋友,我是天尋找它。 – Marckaraujo

+0

今天我學到了一件新事物。 +1和fav。 – Mordechai

+0

@James_D,似乎這個技巧不適用於'-fx-font-size',我試圖綁定'.table-column .label {-fx-font-size:label-size; }'但沒有工作。任何新的詭計? – Marckaraujo