我想以编程方式应用此样式:
.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(), ";}"));
答案 0 :(得分:2)
这是未记录的行为,据我所知(所以你可能不想依赖它),但你可以用类似于“查找颜色”的方式创建一个“查找大小” (记录在案)。
在外部CSS样式表中,执行
vipRating.styleProperty().bind(ratingHeight.asString("disabled-button-size: %f ;"));
然后在Java做
setStyle(...)
您的代码不起作用,因为内联样式只是将字符串指定的实际样式应用于您调用setStyle
的节点:内联样式不包括选择器。
上述解决方案中的想法是在CSS文件中定义一个“查找大小”(一种CSS变量),用于定义所需的高度。然后使用setStyle
更改“查找大小”的值。该值由子节点继承,因此在rating
CSS类的容器上使用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);
}
}
设置它就足够了。
这是一个(更简单的)SSCCE。移动滑块,按钮将改变大小:
.root {
button-size: 20 ;
}
.button {
-fx-pref-height: button-size ;
}
的style.css:
{{1}}