使用自定义控件分配Label.setLabelFor(节点)
问题描述:
我已经编写了一个简单的自定义控件,它扩展了HBox
并包含一个TextField
和Button
。对于许多控件来说,在描述其用途时有一个标签是有意义的,我希望支持助记符的平台上的用户能够轻松访问该控件,更具体地说,将焦点放在按钮实例上。使用自定义控件分配Label.setLabelFor(节点)
我的第一个想法是将一个焦点侦听器分配给自定义控件,假设目标节点将专注于标签激活,但这不起作用。在深入研究JavaFX源代码时,我发现Label.labelForProperty()
使用NodeHelper$NodeAccessor.setLabeledBy(Node, Node)
方法,但无法超越,因为我找不到NodeHelper$NodeAccessor
接口的实际实现。我的猜测是,这个工具类只映射它认为合适的目标的关联,并且出于某种原因,我的自定义控件不是。
我的第二个想法是打开按钮的访问权限,然后可以直接将其指定为目标,但由于显而易见的原因,这是一个糟糕的选择,而且我宁愿让按钮不可访问。
有没有人遇到过这种情况,并且发现了一个可行的解决方案/解决方法而不影响自定义控件的内部实现细节的可见性?
答
这是一个简单的解决方法,这并不需要你的Button
有public
知名度:
public class YourCustomClass {
private TextField tf;
private Button btn;
public void registerLabel(Label label) {
label.setLabelFor(btn);
}
}
感谢;这或多或少是我用于生产代码的解决方法,但不知何故仍然感觉有点“糟糕”。不过,至少它是有效的,毕竟这是主要目标。 – stan