2017-06-17 69 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