我正在研究JavaFX项目。我需要在JavaFX TextField
上执行一些任务。
例如,我想要打印的TextField
的“焦点上”事件
System.out.println("Textfield on focus");
并且在“out focus”事件中它应该打印
System.out.println("Textfield out focus");
答案 0 :(得分:77)
我认为看一个将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");
}
}
});
我希望这个答案很有帮助!
答案 1 :(得分:9)
您可以使用Node
的{{3}}附加ChangeListener
。
扩展Brendan的答案:来自JavaFX8(与Java 8一起提供),lambda表达式与三元运算符相结合可以使其非常紧凑:
textField.focusedProperty().addListener((obs, oldVal, newVal) ->
System.out.println(newVal ? "Focused" : "Unfocused"));
答案 2 :(得分:8)
您需要将ChangeListener附加到要监视的TextField的FocusProperty。
在JavaFX中,只要属性满足JavaFX bean的最小定义,就可以将通知事件(更改或失效侦听器)附加到对象可能拥有的任何JavaFX属性。
如果您的事件处理程序将执行其他操作(例如修改“取消”或“默认”按钮设置),请参阅此帖子:JavaFX 2 -- Setting the defaultButton property: mutually exclusive?
以下是将更改侦听器附加到文本框的一些代码:
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);
}
}
}
答案 3 :(得分:-1)
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");
}
}
});