gpt4 book ai didi

JavaFX - 在自定义节点上设置focusedProperty Listener

转载 作者:太空宇宙 更新时间:2023-11-04 10:22:58 25 4
gpt4 key购买 nike

我有一个自定义的 TimePicker 节点,它大部分工作正常,但我需要能够添加一个监听器来检查它何时获得或失去焦点。问题是它没有检测到我何时专注于它。

public class TimePicker extends HBox {
private NumberField nbxH; // NumberField is a custom class that extends Textbox. `focusedProperty().addListener` works as expected for this node.
private Label lblColon;
private NumberField nbxM;
private Button btnAmPm;

public TimePicker() {
// for testing
this.focusedProperty().addListener((observable, oldValue, newValue) -> {
printDebug("--TIME PICKER FOCUSED PROPERTY-------------------------"
+ "\n" + observable
+ "\n" + oldValue
+ "\n" + newValue
);
});

nbxH = new NumberField();
/* nbxH setup */

lblColon = new Label(":");

nbxM = new NumberField();
/* nbxM setup */

btnAmPm = new Button("AM");
/* btnAmPm setup */
}

/* other methods */
}

在类里面,我可以检查每个 child 是否专注。我想添加一个监听器来检查是否有任何 child 集中注意力或是否没有 child 集中注意力。换句话说,如果任何子级获得焦点,则 isFocusedtrue,如果没有一个子级获得焦点,则 isFocusedfalse;我可以设置一个监听器来检查是否发生变化。问题是,isFocused 被设置为最终的并且不能被覆盖。

最佳答案

我明白了。为每个子元素添加一个监听器,检查是否有任何元素获得焦点并将父元素的焦点设置为结果。当我意识到 setFocused 是一个选项时,这变得非常明显。

nbxM.focusedProperty().addListener((observable, oldValue, newValue) -> {
this.setFocused(nbxH.isFocused() | nbxM.isFocused() | btnAmPm.isFocused());
});

关于JavaFX - 在自定义节点上设置focusedProperty Listener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50890355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com