javafx - 无法在 Javafx 中旋转形状
问题描述
我在 JavaFX 中旋转形状时遇到问题。这是一些代码,我希望箭头指向与行相同的方向(是的,稍后我将添加翻译,将其放在行尾,但一次只做一件事)。
该println
语句向我显示theta
当我移动起点和终点时正确更新,但箭头顽固地保持在原始角度。为了使形状旋转,我还需要执行另一个步骤,还是应该以不同的方式进行?
package application.view;
public class Connector extends Group {
private final DoubleProperty startX;
private final DoubleProperty startY;
private final DoubleProperty endX;
private final DoubleProperty endY;
public Connector(Line line, Polygon arrowhead, Preferences prefs) {
arrowhead.setStroke(Color.BLACK);
arrowhead.setStrokeWidth(1);
arrowhead.setFill(Color.CORNFLOWERBLUE);
startX = new SimpleDoubleProperty();
startY = new SimpleDoubleProperty();
endX = new SimpleDoubleProperty();
endY = new SimpleDoubleProperty();
thetaBinding = new DoubleBinding() {
{
super.bind(startX, startY, endX, endY);
}
@Override
protected double computeValue() {
return Math.atan2(getEndY() - getStartY(), getEndX() - getStartX());
}
};
theta = new SimpleDoubleProperty();
theta.bind(thetaBinding);
theta.addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable,
Number oldValue, Number newValue) {
System.out.println(newValue);
arrowhead.rotateProperty().set((Double)newValue);
}
});
lineLength = new DoubleBinding() {
{
super.bind(startX, startY, endX, endY);
}
@Override
protected double computeValue() {
return Math.hypot(getEndX() - getStartX(), getEndY() - getStartY()) - prefs.getDouble("CONNECTOR_ARROW_LENGTH", Defaults.CONNECTOR_ARROW_LENGTH);
}
};
lineEndX = new DoubleBinding() {
{
super.bind(startX, lineLength, theta);
}
@Override
protected double computeValue() {
return startX.get() + lineLength.get() * Math.cos(theta.get());
}
};
lineEndY = new DoubleBinding() {
{
super.bind(startY, lineLength, theta);
}
@Override
protected double computeValue() {
return startY.get() + lineLength.get() * Math.sin(theta.get());
}
};
arrowhead.getPoints().setAll(new Double[] {
0.0, 0.0,
0.0, prefs.getDouble("CONNECTOR_ARROW_HALF_WIDTH", Defaults.CONNECTOR_ARROW_HALF_WIDTH),
prefs.getDouble("CONNECTOR_ARROW_LENGTH", Defaults.CONNECTOR_ARROW_LENGTH), 0.0,
0.0, -prefs.getDouble("CONNECTOR_ARROW_HALF_WIDTH", Defaults.CONNECTOR_ARROW_HALF_WIDTH),
});
line.startXProperty().bind(startX);
line.startYProperty().bind(startY);
line.endXProperty().bind(lineEndX);
line.endYProperty().bind(lineEndY);
getChildren().addAll(line, arrowhead);
}
public final DoubleBinding thetaBinding;
public final DoubleProperty theta;
public final DoubleBinding lineLength;
public final DoubleBinding lineEndX;
public final DoubleBinding lineEndY;
public double getStartX() {
return startX.get();
}
public void setStartX(double value) {
startX.set(value);
}
public DoubleProperty startXProperty() {
return startX;
}
public double getStartY() {
return startY.get();
}
public void setStartY(double value) {
startY.set(value);
}
public DoubleProperty startYProperty() {
return startY;
}
public double getEndX() {
return endX.get();
}
public void setEndX(double value) {
endX.set(value);
}
public DoubleProperty endXProperty() {
return endX;
}
public double getEndY() {
return endY.get();
}
public void setEndY(double value) {
endY.set(value);
}
public DoubleProperty endYProperty() {
return endY;
}
}
解决方案
推荐阅读
- node.js - 如何在 Firebase Cloud 中托管具有 PeerJS 依赖项的 NodeJS 应用程序?
- java - Jacoco 显示行没有被覆盖,即使 IntelliJIdea 静态代码分析器说它们被覆盖
- javascript - 如何使用 Pug 作为模板引擎更好地管理 ExpressJs 中的 FrontEnd JavaScript 文件?
- c++ - c00000fd 错误是什么意思(在代码块中)?
- php - 如何下载驻留在本地存储库中的文件
- java - 为什么 this.static_variable 在 this 引用实例变量而不是 java 中的 Class 时没有给出错误
- google-apps-script - 符合条件时发送电子邮件的 GOOGLE 脚本
- machine-learning - Python 中是否有任何用于变色龙聚类算法的库?
- scala - 如何阻止函数返回,直到函数中的所有期货都在scala中执行?
- sharepoint - 如何在 PowerApps 上显示 subFloder 的项目?