使用自定义控件分配 Label.setLabelFor(Node)
Assignment of Label.setLabelFor(Node) with custom control
我编写了一个简单的自定义控件,它扩展了 HBox
并包含 TextField
和 Button
。对于许多控件,在描述其用途的同时添加一个标签是有意义的,我希望支持助记符的平台上的用户能够轻松访问控件,更具体地说,将焦点放在按钮实例上。
我的第一个想法是为自定义控件分配一个焦点侦听器,假设目标节点将专注于标签激活,但这不起作用。在深入研究 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);
}
}
我编写了一个简单的自定义控件,它扩展了 HBox
并包含 TextField
和 Button
。对于许多控件,在描述其用途的同时添加一个标签是有意义的,我希望支持助记符的平台上的用户能够轻松访问控件,更具体地说,将焦点放在按钮实例上。
我的第一个想法是为自定义控件分配一个焦点侦听器,假设目标节点将专注于标签激活,但这不起作用。在深入研究 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);
}
}