示例是阶段中的3个节点:button,colorpicker和comboBox(用于更改文本大小)。
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设置颜色然后设置大小时,colorpicker设置的当前颜色将在更改大小后被删除为默认值。我怎样才能实现这个功能?
与场景构建一样,您可以多次更改“文本填充”但不影响大小,或更改大小但不影响“文本填充”。
答案 0 :(得分: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()));