【发布时间】:2021-05-07 08:01:36
【问题描述】:
您好,我正在尝试显示一个 Text 对象和一个控制文本字体大小的滑块。 使用 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);
}
}
【问题讨论】:
-
我不确定您是否可以直接使用属性绑定来执行此操作,但您可以将更改侦听器注册到滑块值属性并在侦听器中更新文本字体的大小。
-
如果您将文本的 textProperty 绑定到滑块的 valueProperty(在本例中是一个数字),您期望会发生什么?使用正确的类型,编译器会告诉你这是不可能的(想知道这怎么不会爆炸......)
-
*hach .. 它甚至无法编译 ;)
-
@Puce 我不确定你是否可以使用属性绑定来做到这一点如果 OP 真的想更改文本的字体大小(字体是不可变的)
-
即使打字和编译问题得到解决,这实际上也不会做任何事情,因为代码存在结构问题。您有一个
VBox子类,但您永远不会更改当前VBox实例的任何状态。相反,您创建一个新的VBox并向其中添加内容,但您永远无法使该新的VBox可访问。您需要确定是使用继承(不推荐)还是某种创建模式(推荐),坚持一个,并正确实施。
标签: java user-interface javafx