当前位置: 首页 > 知识库问答 >
问题:

如何执行JavaFX TextField上的任务在onpoint和outpoint?

柯良骏
2023-03-14

我正在从事JavaFX项目。我需要在JavaFXTextField上执行一些任务。

例如,我想打印的TextField的"on point"事件

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

在“焦点不集中”事件中,它应该打印出来

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

共有3个答案

丁毅庵
2023-03-14

您需要将ChangeListener附加到要监视的文本字段的FocusProperty。

在JavaFX中,您可以将通知事件(更改或无效侦听器)附加到对象可能拥有的任何JavaFX属性,只要该属性满足JavaFXbean的最低定义。

如果您的事件处理程序将执行其他操作,例如修改取消或默认按钮设置:javafx2——设置defaultButton属性:互斥,请参阅本文?

以下是将更改侦听器附加到文本框的一些代码:

txtDx.focusedProperty().addListener(m_txtDxListener);

Listener对象已存储在实例字段中,因此可以与addListener()和RemovelListener()一起使用。对于短命的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);
        }
    }
}
商俊智
2023-03-14

您可以使用Node焦点属性来附加一个ChangeListener

扩展Brendan的答案:从JavaFX8(Java8),lambda表达式结合三元运算符可以使其非常紧凑:

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

我认为看到一个将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");
        }
    }
});

希望这个回答有帮助!

 类似资料:
  • 问题内容: 我正在从事JavaFX项目。我需要在JavaFX上执行一些任务。 例如,对于我要打印的“焦点”事件 并在“无焦点”事件上打印 问题答案: 我认为看一个将ChangeListener指定为匿名内部类(例如scottb)的示例可能会有所帮助。 希望这个答案对您有所帮助!

  • 我正在尝试创建一个应用程序,用于查询cat图像的站点,如果JSON ID是唯一的,则将其保存到android设备,然后从设备以幻灯片格式显示它们。尽管如此,我的AsyncTask似乎并没有实际执行。调试器确认已建立网络连接,并且不会向我反馈任何错误,所以我不知道代码出了什么问题。希望有人能帮忙!代码如下:

  • 问题内容: 我有三个连接的线程,即第二个线程在第一个死后执行。 这是我的代码: 我将如何使用而不是三个线程对象来实现此功能? 问题答案: 如果您想要/需要的是一个接一个地执行一组作业,但要在与主应用程序线程不同的单个线程中执行,请使用。

  • 我有代码: 年级4.5.1对此警告为 但是link没有给我任何可以替换它的提示,因为我不能仅仅设置任务依赖项,比如dependsOn或FinalizdBy--它不是从其他任务调用的,而是从构建的末尾调用的。

  • 我只是把我的脚趾头浸入RxJava中,所以请温柔点:)到今天为止,我对异步任务还可以,但它变得越来越复杂,我想我终于偶然发现了一个需求,实际上我很难用简单的异步任务来满足这个需求。这是我的用例: 1)我有一个方法(我们称之为),它需要在会话中运行一次。如果以前运行过,它会返回缓存的响应。否则,它会执行一个网络调用,然后根据结果执行另一个。这两个网络任务都使用OkHttp运行,并且是同步的。方法本身

  • 在上下文中没有Executor bean的情况下,Spring Boot会自动配置一个具有合理默认值的ThreadPoolTaskExecutor,这些默认值可以自动与异步任务执行(@EnableAsync)和Spring MVC异步请求处理相关联。 如果您在上下文中定义了自定义Executor,则常规任务执行(即@EnableAsync)将透明地使用它,但不会配置Spring MVC支持,因为它