我正在创建一个动画,其中我有一个由一条线连接的两个圆圈。当节点(圆圈)移动时,我希望线条绑定它们的中心。我试过了什么?
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.stage.Stage;
import javafx.util.Duration;
public class BindIt extends Application {
@Override
public void start(Stage primaryStage) {
DoubleProperty startX = new SimpleDoubleProperty(100);
DoubleProperty startY = new SimpleDoubleProperty(100);
DoubleProperty endX = new SimpleDoubleProperty(300);
DoubleProperty endY = new SimpleDoubleProperty(300);
Line line = new Line(100, 100, 300, 300);
line.startXProperty().bind(startX);
line.startYProperty().bind(startY);
line.endXProperty().bind(endX);
line.endYProperty().bind(endY);
Circle c1 = new Circle(25);
c1.setCenterX(100);
c1.setCenterY(100);
c1.centerXProperty().bind(startX);
c1.centerYProperty().bind(startY);
Circle c2 = new Circle(25);
c2.setCenterX(300);
c2.setCenterY(300);
c2.centerXProperty().bind(endX);
c2.centerYProperty().bind(endY);
Group root = new Group();
root.getChildren().add(line);
root.getChildren().add(c1);
root.getChildren().add(c2);
Scene scene = new Scene(root, 500, 500);
primaryStage.setTitle("Bind the line!");
primaryStage.setScene(scene);
final Timeline timeline = new Timeline();
timeline.getKeyFrames().addAll(new KeyFrame(Duration.millis(0)), new KeyFrame(Duration.millis(2000), new KeyValue(c1.centerXProperty(), 200)));
timeline.play();
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
如果我用“绑定”删除所有行,我会移动圆圈。但是使用绑定我得到错误说“无法绑定等” 我的意思是这些行
line.startXProperty().bind(startX);
line.startYProperty().bind(startY);
line.endXProperty().bind(endX);
line.endYProperty().bind(endY);
c1.centerXProperty().bind(startX);
c1.centerYProperty().bind(startY);
c2.centerXProperty().bind(endX);
c2.centerYProperty().bind(endY);
没有这些代码就行了。但绑定不会发生。
有人可以告诉我,我在哪里做错了吗?
答案 0 :(得分:1)
我找到了答案,如果你绑定一个属性它是因变量,所以它不能被改变,只能改变自变量。所以我改变了
c1.centerXProperty().bind(startX)
到
startX.bind(c1.centerXProperty())
有效。感谢大家的评论。
答案 1 :(得分:0)
您收到错误
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: Circle.centerX : A bound value cannot be set.
这说明了一切。您无法在时间轴中设置圆的中心X和Y.您应该使用双重属性而不是中心(X / Y)属性。