使用自定义控件分配 Label.setLabelFor(Node)

Assignment of Label.setLabelFor(Node) with custom control

我编写了一个简单的自定义控件,它扩展了 HBox 并包含 TextFieldButton。对于许多控件,在描述其用途的同时添加一个标签是有意义的,我希望支持助记符的平台上的用户能够轻松访问控件,更具体地说,将焦点放在按钮实例上。

我的第一个想法是为自定义控件分配一个焦点侦听器,假设目标节点将专注于标签激活,但这不起作用。在深入研究 JavaFX 源代码时,我发现 Label.labelForProperty() 使用 NodeHelper$NodeAccessor.setLabeledBy(Node, Node) 方法,但无法超越该方法,因为我找不到 NodeHelper$NodeAccessor 接口的可靠实现。我的猜测是此实用程序 class 仅将关联映射到它认为合适的目标,而由于某些原因我的自定义控件不是。

我的第二个想法是打开按钮的访问权限,然后可以将其直接指定为目标,但出于明显的原因,这是一个糟糕的选择,我宁愿让按钮无法访问。

有没有人遇到过这种情况并找到可行的solution/workaround而不影响自定义控件内部实现细节的可见性?

这是一个简单的解决方法,不需要您的 Button 具有 public 可见性:

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

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