我有兩個控件在我的JavaFX應用程序 1.文本字段 2. ListView控件如何在JavaFX中設置節點相對於另一個節點的位置?
我想放置的ListView只使用文本字段的座標的文本字段下方。 由於TextField的位置發生變化。
詳情:
我創建要求當用戶輸入文本字段的東西,就彈出一個列表,我的項目自動建議文本字段。該文本字段可能存在於場景中的任何位置,也可能位於另一個列表視圖中。所以我需要的是如何在屏幕上獲得文本字段的座標,以便我可以將列表視圖放置在文本字段的正下方。
我有兩個控件在我的JavaFX應用程序 1.文本字段 2. ListView控件如何在JavaFX中設置節點相對於另一個節點的位置?
我想放置的ListView只使用文本字段的座標的文本字段下方。 由於TextField的位置發生變化。
詳情:
我創建要求當用戶輸入文本字段的東西,就彈出一個列表,我的項目自動建議文本字段。該文本字段可能存在於場景中的任何位置,也可能位於另一個列表視圖中。所以我需要的是如何在屏幕上獲得文本字段的座標,以便我可以將列表視圖放置在文本字段的正下方。
我在這裏看到多個選項:
我想你可能是用ContextMenu
的更好。當你顯示一個ContextMenu
時,你可以定義一個視圖,它應該相對於視圖的一側顯示出來。
如果一個ContextMenu
不能滿足你的要求,我有最簡單的想法是,你有VBox
和輸入TextField
並在VBox
的ListView
取代你TextField
。這將使他們在一起,你可以像定位你的TextField
那樣定位VBox
。
,如果你想展示出來自己最後的文本字段包含了諸如layoutX
和layoutY
和height
和width
屬性。使用那些你可以計算出ListView的位置(例如,ListView的Y位置是textField.layoutY + textField.height
)。爲了保持這一立場是最新的我看到兩個選項:
TextField
你有可能改寫一些Parent
的layoutChildrens
方法,所以你也許可以把這個代碼在那裏。ChangeListeners
當他們改變得到通知,並相應地重新定位你的ListView。'layoutX'和'layoutY'不會給你的文本字段的屏幕座標,雖然。 –
非常感謝...我認爲ChangeListeners會爲我工作..:D – AshutoshSurya007
@James_D是真的,但我不明白爲什麼他首先需要屏幕座標,所以我沒有用localToScreen轉換解決方案。 – findusl
要獲取屏幕座標的文本字段的位置,你可以做
Bounds boundsInScreen = textField.localToScreen(textField.getBoundsInLocal());
這會返回一個Bounds
對象,從中可以得到各種座標,例如
Popup popup = ... ;
popup.setWidth(boundsInScreen.getWidth());
popup.show(textField, boundsInScreen.getMinX(), boundsInScreen.getMaxY());
使用'VBox',或其他[佈局面板(http://docs.oracle.com/javase/8/javafx/layout-tutorial/builtin_layouts.htm#JFXLY102)即達到你所需要的 –
@James_D謝謝您的回覆......請參閱編輯(我已添加了當前場景的一些詳細信息)。 – AshutoshSurya007
根據您的具體使用情況下,這也許就是一個重複:https://stackoverflow.com/q/36861056/3795043 – findusl