私はビデオアノテーション用のプログラムを開発しています。ビデオ中に見られるオブジェクトは関心のあるオブジェクトとしてマークされ、相互作用している場合、ユーザは2つのアノテーションの間に線を引くことができる。可視レベルでは、アノテーションは基本的に透明ですRectangle
sであり、それらの間の関係はLine
です。この時点では、四角形の中心を計算するのは簡単ですが、Line
の開始と終了を対応するRectangle
の中心にバインドすることはできません。バインドするRectangleにcenterXPropertyを作成するにはどうすればよいですか?
は、中心xとyを計算Rectangleクラス内の2つのDoubleBinding
の作成:私は、以下のアプローチしようとしている
private DoubleBinding centerXBinding = new DoubleBinding() {
@Override
protected double computeValue() {
return getX() + getWidth()/2;
}
};
をして、新しく作成されたLine
にそれをバインド:
`currentRelation.startXProperty().bind(startShape.centerXBinding());`
コントローラ内の
...
結果は最初はOKです。行の開始点と終了点は、正確には避けたいところですしかし、Rectangle
が別の位置にドラッグされると、行末はどこにも移動しません! 誰にも問題が表示されますか?
UPDATE:Rectangle
の動きは、オフセット計算とtranslateX
のような翻訳値を更新することによって行われ
:どちらかxProperty
またはwidthProperty
あるときに無効にするため
public class MyRectangle extends Rectangle {
private double orgSceneX;
private double orgSceneY;
private double orgTranslateX;
private double orgTranslateY;
private void initEventHandling() {
this.setOnMousePressed(mousePress -> {
if (mousePress.getButton() == MouseButton.PRIMARY) {
orgSceneX = mousePress.getSceneX();
orgSceneY = mousePress.getSceneY();
orgTranslateX = ((MyRectangle) mousePress.getSource()).getTranslateX();
orgTranslateY = ((MyRectangle) mousePress.getSource()).getTranslateY();
mousePress.consume();
} else if (mousePress.getButton() == MouseButton.SECONDARY) {
System.out.println(LOG_TAG + ": right mouse button PRESS on " + this.getId() + ", event not consumed");
}
});
this.setOnMouseDragged(mouseDrag -> {
if (mouseDrag.getButton() == MouseButton.PRIMARY) {
double offsetX = mouseDrag.getSceneX() - orgSceneX;
double offsetY = mouseDrag.getSceneY() - orgSceneY;
double updateTranslateX = orgTranslateX + offsetX;
double updateTranslateY = orgTranslateY + offsetY;
this.setTranslateX(updateTranslateX);
this.setTranslateY(updateTranslateY);
mouseDrag.consume();
}
});
}
}
残念ながら、 'rectangle'を' translateX'で移動していますので、この解決方法(正しいことですが)はバインディングを行うものではありません。私の動きが翻訳によって行われたときに何をすべきか知っていますか? – deHaar
@deHaarこれは、人々が[MCVE]を含まない質問を投稿したときに非常にイライラしている理由です:彼らが記述した問題は、投稿したコードによって引き起こされたものであり、これはここにある)。あなたの質問を更新してください。 (あるいは、明らかに、 'x'を変更して矩形を動かすようにアプローチを変更してください。) –
残念ですが、私は 'Rectangle'の動きを行うコードで質問を更新しました。私の解決策には対応するプロパティがあるので、翻訳された値を持つバインディングにaproachを変更します。なぜなら、それらはアップタイムになるからです。あなたがより良いアプローチを知っているなら、私に知らせてください。 – deHaar