2017-10-20 191 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