首页 > 解决方案 > 如何将文本大小绑定到 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);

    }
}

标签: javauser-interfacejavafx

解决方案


您不能直接绑定字体大小。但是你可以使用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()))
);

推荐阅读