如何在聚焦状态和outfocus对JavaFX的文本字段执行任务吗?(How perform tas

2019-09-03 04:46发布

我工作的JavaFX项目。 我需要在一个JavaFX执行一些任务TextField

例如上的“关于焦点”事件TextField我要打印

System.out.println("Textfield on focus");

而关于“失焦”事件应该打印

System.out.println("Textfield out focus");

Answer 1:

我想这可能是有益的,看看它指定的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");
        }
    }
});

我希望这个答案是有帮助的!



Answer 2:

你会想一个ChangeListener附加到要监视的文本字段的FocusProperty。

在JavaFX中,你可以将通知事件(更改或失效的监听器),以一个对象可能只要属性满足一个JavaFX豆最小定义具有任何的JavaFX财产。

请参阅这篇文章,如果你的事件处理程序会做其他事情,如修改取消或默认按钮设置: JavaFX的2 -设置defaultButton属性:相互排斥?

下面是一些代码的更改监听器连接到一个文本框:

txtDx.focusedProperty().addListener(m_txtDxListener);

监听器对象已经被存储在一个实例字段,以便它可以与两者的addListener()和的removeListener()可以使用。 对于一个短暂的文本字段,你可以指定一个匿名内部类侦听器对象。

下面是我写的我的焦点侦听器,专用类:

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);
        }
    }
}


Answer 3:

您可以使用focusedPropertyNode附上ChangeListener

从布伦丹扩展答案:从JavaFX8(因为它自带的Java 8),lambda表达式与三元联合运营商可以使它真正紧凑:

textField.focusedProperty().addListener((obs, oldVal, newVal) -> 
    System.out.println(newVal ? "Focused" : "Unfocused"));


文章来源: How perform task on javaFX TextField at onfocus and outfocus?