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()));
示例是阶段中的 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()));