java - 如何将文本大小绑定到 javafx 中的滑块?
问题描述
您好我正在尝试显示一个文本对象和一个控制文本字体大小的滑块。使用 JavaFX 属性值观察滑块值的变化,然后根据滑块值更新文本大小。我错过了什么吗?
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.geometry.Orientation;
import javafx.geometry.Pos;
import javafx.scene.text.Text;
import javafx.scene.control.Slider;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
public class TextSlider extends VBox
{
private Text text;
private Slider slider;
private VBox vbox;
private Font font;
private double initVal = 20;
public TextSlider()
{
text = new Text("Amsterdam");
slider = new Slider(0,150,100);
text.setFont(new Font(initVal));
// slider.setShowTickMarks(true);
//slider.setPadding(new Insets(10,10,10,10));
//text.fontProperty();
text.textProperty().bind(slider.valueProperty());
vbox = new VBox(text,slider);
vbox.setAlignment(Pos.CENTER);
vbox.getChildren().addAll(vbox);
}
}
解决方案
您不能直接绑定字体大小。但是你可以使用text.styleProperty()
. style 属性使您可以通过类似 css 的样式来更改外观。您甚至可以将其绑定到其他属性。
textNode.styleProperty().bind(
Bindings.concat("-fx-font-size: ", slider.valueProperty().asString()));
这将在每次滑块的 value 属性更改时更新文本节点的 style 属性。如果滑块值更改为 20,则样式将设置为-fx-font-size: 20
。
另一种选择是使用更改侦听器并在更改的事件上设置新字体:
slider.valueProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(
ObservableValue<? extends Number> observableValue,
Number oldValue,
Number newValue) {
text.setFont(new Font(newValue.doubleValue()));
}
});
Java 8+:(与上面相同的代码)
slider.valueProperty().addListener(
(observableValue, oldValue, newValue) ->
text.setFont(new Font(newValue.doubleValue()))
);
推荐阅读
- notepad++ - 如何替换记事本++中特定符号后的所有内容?
- c# - 为什么只有一个玩家应该做动画时两个玩家都在做?
- r - 如何在 R 中调试意外符号
- javascript - 如何在 bootsrap 网格系统中使用块 Vue Js?
- python - 如何使用python为两个变量的函数创建多项式?
- mongodb - Mongodb聚合查询$match和$group
- java - 无法实例化类 org.apache.maven.surefire.booter.SureFireBooterForkException
- python - 如何在 python 的 netcdf 文件中读取变量的值?
- python - 当模型管道由旧版本的 sckit-learn 创建时,如何更新 stackingestimator 参数?
- c# - 如何在包含数据的页面之间导航