2017-12-20 1 views
1

コードはJavaFXで記述されています。getBoundsInLocalの座標が正しくないのはなぜですか?

私にはルートパネルとVBoxがあります。 VBoxにはたくさんの小さなパネルがあります。

VBoxに小さなパネルを1つ追加するボタンをクリックして、新しいパネルにメッセージダイアログを表示します。

button.setOnAction(() -> { 
    Node selectPanel = new Node(); 
    vbox.getChildren().add(selectPanel); 
    Bounds bounds = selectPanel.localToScreen(selectPanel.getBoundsInLocal()); 
    showMessage(bounds); 
}); 

しかし、メッセージは新しいパネルの位置に表示されません。

コードをデバッグし、境界がルートパネル(またはvbox)の左上であることを確認します。誰かが新しいパネルの正しい座標を取得する方法を教えてもらえますか?

+0

' Node'は、抽象的である 'ので、ノードselectPanel =新しいノード():

あなたは言及した行の後に次の2つのステートメントを実行することによって、それを強制することができますあなた自身の 'Node'クラスです。ラムダ式も引数がないので間違っています。コンパイルするコードだけを投稿してください。 – DVarga

答えて

2

あなたのコードはコンパイルされていません(私のコメントを参照してください)が、vbox.getChildren().add(selectPanel);が呼び出されても、レイアウトの計算は(確かに)起こらないという事実に由来します。あなたが実装しなければならないので、 `、コンパイルされません。

vbox.layout(); 
vbox.applyCss(); 
+0

ありがとう!できます。もう1つの質問 –

+0

。座標が新しいパネルの位置に正確にないことがわかります。同じ時間にvboxに2つ以上のパネルを追加すると、各メッセージボックスにオフセットがあります。同じ時間に(たとえば10以上の)多くのパネルを追加すると、メッセージボックスが重なります。インデックスが大きいほどオフセットが大きくなります。 –

関連する問題