我是javafx的初学者。 我想将垂直滑块绑定到矩形高度。 我想使用低级绑定。但它没有做任何事情。 请帮我 。感谢' S
rect = (Rectangle) root.lookup("#rect");
vSlider = (Slider) root.lookup("#vSlider");
final RectangleProperty rectangle = new RectangleProperty(rect);
DoubleBinding vSliderBind = new DoubleBinding() {
{
super.bind(vSlider.valueProperty(),rectangle.heightpProperty());
}
@Override
protected double computeValue() {
rectangle.setHeightp(vSlider.valueProperty().doubleValue()*3);
// System.out.print("vslider");
return rectangle.getHeightp() ;
}
};
vSliderBind.get()
答案 0 :(得分:3)
为什么要尝试使用低级绑定?低级绑定的本质(正如你所说)是执行复杂的计算,这是流畅的API无法实现的。要将height
绑定到滑块的value
,只需一条简单的行就可以了:
r.heightProperty().bind(slider.valueProperty());
即使您想要简单的操作(例如,将其乘以某个东西,也可以是常量或其他属性):
r.heightProperty().bind(slider.valueProperty().multiply(0.5));
以下是完成代码的完整代码:
import javafx.application.Application;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.Slider;
import javafx.scene.layout.AnchorPane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class RectHeightSlider extends Application
{
@Override
public void start(Stage primaryStage) {
AnchorPane root = new AnchorPane();
Slider slider = new Slider();
slider.setMin(10);
slider.setMax(100);
slider.setValue(50);
slider.setOrientation(Orientation.VERTICAL);
root.getChildren().add(slider);
Rectangle r = new Rectangle();
r.setWidth(100);
r.heightProperty().bind(slider.valueProperty());
root.getChildren().add(r);
AnchorPane.setRightAnchor(r, 0.0);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
修改强>
如果你 做低级别的话,那就做:
DoubleBinding vSliderBind = new DoubleBinding() {
{
super.bind(vSlider.valueProperty());
}
@Override
protected double computeValue() {
return vSlider.getValue();
}
};
rectangle.heightProperty().bind(vSliderBind);
原因是:
super.bind()
将侦听器设置为绑定所依赖的属性。此绑定取决于滑块的值,计算矩形的高度;因此,你必须bind()
只有滑块的值。computeValue()
,如下所示:只要一个或多个绑定属性发生变化,就可以计算实际输出值(此处:rect的高度)。这里的计算是一个简单的身份(f(x)= x),在其他情况下,它可能更复杂。另一种方法是在value属性中添加一个监听器,然后手动更新高度。