假设一个JavaFX CustomControl
节点包含两个TextField
s。
如果这些TextField
中的任何一个具有焦点,那么CustomControl.isFocused()
应该返回true
。如果他们都没有焦点,那么CustomControl.isFocused()
应该返回false
。
我该怎么做?
答案 0 :(得分:1)
当您的CustomControl
使用撰写时,您可以委派到每个TextField
的焦点属性。鉴于两个例子,
private final TextField tf1 = new TextField("One");
private final TextField tf2 = new TextField("Two");
实例方法isFocused()
的实现非常简单:
private boolean isFocused() {
return tf1.isFocused() | tf2.isFocused();
}
添加焦点监听器,如图所示here,以查看效果。
tf1.focusedProperty().addListener((Observable o) -> {
System.out.println(isFocused());
});
tf2.focusedProperty().addListener((Observable o) -> {
System.out.println(isFocused());
});
这无法完成。整个问题是
isFocused()
中final
为Node
。
您似乎想要覆盖isFocused()
中的CustomControl
,但这对于final
方法来说是不可能的,并且它会违反具有焦点的单个组件的概念。由于CustomControl
是复合词,因此您需要在内部管理焦点。您可能希望使用ListView
中的自定义FocusModel
。
答案 1 :(得分:1)
尝试一线解决方案:
custEvents.GroupBy(c => c.Customer)
.Where(g => g.Any(c => c.wk1eventId != null || c.wk2eventId != null || c.wk3eventId != null || c.wk4eventId != null))
.SelectMany(g => g);
现在,在客户端,您可以收听此聚合焦点属性。