我正在从事 JavaFX 项目。我需要在 JavaFX 上执行一些任务TextField
。
例如在TextField
我想打印的“焦点”事件上
System.out.println("Textfield on focus");
在“out focus”事件上它应该打印
System.out.println("Textfield out focus");
我认为查看将 ChangeListener 指定为匿名内部类的示例可能会有所帮助,例如提到的 scottb。
TextField yourTextField = new TextField();
yourTextField.focusedProperty().addListener(new ChangeListener<Boolean>()
{
@Override
public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue)
{
if (newPropertyValue)
{
System.out.println("Textfield on focus");
}
else
{
System.out.println("Textfield out focus");
}
}
});
我希望这个答案有帮助!
您可以使用focusedProperty
ofNode
来附加一个ChangeListener
.
扩展 Brendan 的答案:从 JavaFX8(Java 8 附带)开始,结合三元运算符的 lambda 表达式可以使其非常紧凑:
textField.focusedProperty().addListener((obs, oldVal, newVal) ->
System.out.println(newVal ? "Focused" : "Unfocused"));
您需要将 ChangeListener 附加到您希望监视的 TextField 的 FocusProperty。
在 JavaFX 中,您可以将通知事件(更改或无效侦听器)附加到对象可能拥有的任何 JavaFX 属性,只要该属性符合 JavaFX bean 的最低定义即可。
如果您的事件处理程序将执行其他操作,例如修改取消或默认按钮设置,请参阅此帖子:JavaFX 2 -- 设置 defaultButton 属性:互斥?
以下是将更改侦听器附加到文本框的一些代码:
txtDx.focusedProperty().addListener(m_txtDxListener);
Listener 对象已存储在实例字段中,因此它可以与 addListener() 和 removeListener() 一起使用。对于短暂的 TextField,您可以使用匿名内部类指定侦听器对象。
这是我为我的焦点听众写的私人课程:
private class FocusPropertyChangeListener implements ChangeListener<Boolean> {
FocusPropertyChangeListener() { System.out.println("New FPCL instance"); }
@Override
public void changed(ObservableValue<? extends Boolean> ov,
Boolean oldb, Boolean newb) {
System.out.println("Focus change triggered");
if (ancEncEditor.isVisible() && !ancEncEditor.isDisabled()) {
boolean b = (newb != null && newb.booleanValue() == true);
System.out.println("txtDx focus change event triggered: DxAdd = " + b);
if (b) { btnDxAdd.setDefaultButton(true); }
else { btnWindowCommit.setDefaultButton(true); }
btnWindowCommit.setCancelButton(true);
btnDxAdd.setDefaultButton(b);
}
}
}
yourTextField.focusedProperty().addListener(new ChangeListener<Boolean>()
{
@Override
public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue)
{
if (newPropertyValue)
{
System.out.println("Textfield on focus");
}
else
{
System.out.println("Textfield out focus");
}
}
});
或者您可以在 java 8 或更高版本中使用
textField.focusedProperty().addListener((obs, oldVal, newVal) ->
System.out.println(newVal ? "textfield on focus" : "Textfield out focus"));