2017-09-19 21 views
0

は、私はちょうどのTextFieldの座標を使用してテキストフィールドの下にリストビューを配置したい私のJavaFXアプリケーション 1のTextField 2.リストビューJavaFXでノードの位置を他のノードに関連付ける方法は?

に2つのコントロールを持っています。 TextFieldの位置が変更されるためです。

詳細:

私は、ユーザーがテキストフィールドに何かを入力すると、リストがポップアップする必要が私のプロジェクトのための自動提案テキストフィールドを作成しています。そのテキストフィールドは、シーンのどこにでも存在する可能性があり、別のリストビューにも存在する可能性があります。ですから、私が正確に必要とするのは、テキストフィールドのすぐ下にリストビューを配置できるように、画面上のテキストフィールドの座標を取得する方法です。

+0

あなたが必要なものを達成する 'VBox'、または他の[レイアウトペイン](http://docs.oracle.com/javase/8/javafx/layout-tutorial/builtin_layouts.htm#JFXLY102)を使用します –

+0

@James_Dあなたの返事ありがとうございました...編集を参照してください(私は現在のシナリオのいくつかの詳細を追加しました)。 – AshutoshSurya007

+0

あなたの正確なユースケースによっては、これはおそらくこれの複製です:https://stackoverflow.com/q/36861056/3795043 – findusl

答えて

0

私はここで複数のオプションを参照してください。

  • 私はあなたがContextMenuを使用する方が良いかもしれないと思います。 ContextMenuを表示すると、表示するビューとそのビューの横に表示するビューを定義できます。

  • ContextMenuあなたの要求を満たすべきではない、私が持っている最も簡単なアイデアは、あなたがVBoxVBoxと入力TextFieldListViewであなたのTextFieldを交換することです。それが一緒になるようにして、TextFieldのようにVBoxを配置することができます。

  • 最終あなたが自分でそれをレイアウトしたい場合は、テキストフィールドはlayoutXlayoutYheightwidthのようなプロパティが含まれています。これらを使用すると、ListViewの位置を計算することができます(たとえば、ListViewのY位置はtextField.layoutY + textField.heightになります)。 TextFieldあなたはおそらく、いくつかのParentlayoutChildrens方法を上書きしているので、あなたはおそらくそこにこのコードを置くことができますを配置するには

    • :日付までこの位置を維持するために私は2つのオプションを参照してください。
    • これらのプロパティにChangeListenersを登録して、それらが変更されたときに通知を受け取ってリストビューの位置を変更することもできます。
+0

'layoutX'と' layoutY'はあなたにテキストフィールドのスクリーン座標を与えませんが、しかし、。 –

+0

ありがとうございました...私はChangeListenersが私のために働くと思う..:D – AshutoshSurya007

+0

@ James_D true、しかし私は彼が最初にスクリーン座標を必要とする理由を理解していなかったので、localToScreen変換のソリューションを入れなかった。 – findusl

0

スクリーン座標内のテキストフィールドの位置を取得するには、あなたが

Bounds boundsInScreen = textField.localToScreen(textField.getBoundsInLocal()); 

を行うことができますこれは、例えば、あなたが様々な座標を取得することができ、そこからBoundsオブジェクトを返します

Popup popup = ... ; 
popup.setWidth(boundsInScreen.getWidth()); 
popup.show(textField, boundsInScreen.getMinX(), boundsInScreen.getMaxY()); 
関連する問題