javafx 频繁更改节点样式而不是 CSS

javafx change style of a node frequently not by CSS

示例是阶段中的 3 个节点:按钮、颜色选择器和组合框(用于更改文本大小)。

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()));`

目前的结果是当我通过colorpicker设置颜色然后设置size时,刚刚通过colorpicker设置的当前颜色在更改尺寸后将被移除为默认颜色。我怎样才能实现这个功能?

与 Scene Build 一样,您可以多次更改 "text fill" 但不会影响大小,或者更改大小但不会影响 "text fill"。

创建一个依赖于两个控件的值的绑定并重新计算它们的样式,即使只有一个更改:

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()));