2017-10-20 188 views
1

我已經編寫了一個簡單的自定義控件,它擴展了HBox幷包含一個TextFieldButton。對於許多控件來說,在描述其用途時有一個標籤是有意義的,我希望支持助記符的平臺上的用戶能夠輕鬆訪問該控件,更具體地說,將焦點放在按鈕實例上。使用自定義控件分配Label.setLabelFor(節點)

我的第一個想法是將一個焦點偵聽器分配給自定義控件,假設目標節點將專注於標籤激活,但這不起作用。在深入研究JavaFX源代碼時,我發現Label.labelForProperty()使用NodeHelper$NodeAccessor.setLabeledBy(Node, Node)方法,但無法超越,因爲我找不到NodeHelper$NodeAccessor接口的實際實現。我的猜測是,這個工具類只映射它認爲合適的目標的關聯,並且出於某種原因,我的自定義控件不是。

我的第二個想法是打開按鈕的訪問權限,然後可以直接將其指定爲目標,但由於顯而易見的原因,這是一個糟糕的選擇,而且我寧願讓按鈕不可訪問。

有沒有人遇到過這種情況,並且發現了一個可行的解決方案/解決方法而不影響自定義控件的內部實現細節的可見性?

回答

0

這是一個簡單的解決方法,這並不需要你的Buttonpublic知名度:

public class YourCustomClass { 
    private TextField tf; 
    private Button btn; 

    public void registerLabel(Label label) { 
     label.setLabelFor(btn); 
    } 
} 
+0

感謝;這或多或少是我用於生產代碼的解決方法,但不知何故仍然感覺有點「糟糕」。不過,至少它是有效的,畢竟這是主要目標。 – stan