如何监听场景图节点中的WindowEvent.WINDOW_SHOWN?

2024-05-30

似乎 WindowEvent.WINDOW_SHOWN 永远不会在场景图中的任何节点上分派,也没有(我能找到的)知道节点何时可见/渲染/显示。例如:

测试启动器.java

package com.example.javafx.event;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class TestLauncher extends Application
{
    public static void main(String[] args)
    {
        Application.launch(TestLauncher.class, args);
    }

    @Override
    public void start(Stage stage) throws Exception
    {
        Parent root = FXMLLoader.load(TestController.class.getResource("TestView.fxml"));
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }
}

测试控制器.java

package com.example.javafx.event;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.TextField;
import javafx.stage.WindowEvent;

public class TestController implements Initializable
{
    @FXML private Parent root;
    @FXML private TextField serverAddressInput;
    @FXML private TextField usernameInput;

    @Override
    public void initialize(URL url, ResourceBundle rb)
    {
        serverAddressInput.setText("127.0.0.1");

        //won't work because stage isn't visible yet
        trySetFocusOnUsernameInput1();

        //apparently Stage never passes on any WindowEvents to the children...
        trySetFocusOnUsernameInput2();
    }

    private void trySetFocusOnUsernameInput1()
    {
        usernameInput.requestFocus();
    }

    private void trySetFocusOnUsernameInput2()
    {
        root.addEventFilter(WindowEvent.WINDOW_SHOWN, new EventHandler<WindowEvent>()
        {
            @Override
            public void handle(WindowEvent window)
            {
                usernameInput.requestFocus();
            }
        });

        root.addEventHandler(WindowEvent.WINDOW_SHOWN, new EventHandler<WindowEvent>()
        {
            @Override
            public void handle(WindowEvent window)
            {
                usernameInput.requestFocus();
            }
        });
    }

    public void handleWindowShownEvent()
    {
        usernameInput.requestFocus();
    }
}

测试视图.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<VBox
    xmlns:fx="http://javafx.com/fxml"

    fx:id="root"
    fx:controller="com.example.javafx.event.TestController"

    prefHeight="150"
    prefWidth="200"
>
    <children>
        <TextField fx:id="serverAddressInput" />
        <TextField fx:id="usernameInput" />
    </children>
</VBox>

那么,实际上,节点还能如何意识到它是可见/渲染/显示的事实呢?


我想可能的解决方案之一是将以下方法添加到测试控制器.java

    public void handleWindowShownEvent()
    {
        usernameInput.requestFocus();
    }

然后更改start中的方法测试启动器至以下内容:

    @Override
    public void start(Stage stage) throws Exception
    {
        FXMLLoader loader = new FXMLLoader();
        Parent root = (Parent)loader.load(TestController.class.getResourceAsStream("TestView.fxml"));
        final TestController controller = (TestController)loader.getController();
        stage.addEventHandler(WindowEvent.WINDOW_SHOWN, new EventHandler<WindowEvent>()
        {
            @Override
            public void handle(WindowEvent window)
            {
                controller.handleWindowShownEvent();
            }
        });
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }

我真的很欢迎其他解决方案,因为这个解决方案看起来太笨重了......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何监听场景图节点中的WindowEvent.WINDOW_SHOWN? 的相关文章

  • 在 WPF 媒体元素中连续重播视频

    我有一个在媒体元素中播放的视频文件 我需要继续播放 因此我尝试了 me play me MediaEnded new RoutedEventHandler me MediaEnded 使用此事件方法 loop to keep video p
  • 访问 FXML 控制器类

    我想随时与 FXML 控制器类进行通信 以更新主应用程序或其他阶段屏幕上的信息 这可能吗 我还没有找到任何方法来做到这一点 静态函数可能是一种方法 但它们无法访问表单的控件 有任何想法吗 您可以从以下位置获取控制器FXMLLoader FX
  • 在 javascript 原型事件处理程序中保留“this”引用[重复]

    这个问题在这里已经有答案了 正确的保存方法是什么this存储在对象原型内的事件处理程序中的 javascript 引用 我不想创建像 this 或 that 这样的临时变量 而且我不能使用像 jQuery 这样的框架 我看到很多人谈论使用
  • JavaFX 2.0 FXML 子窗口

    经过多次搜索我发现了这个问题如何创建 javafx 2 0 应用程序 MDI https stackoverflow com questions 10915388 how to create a javafx 2 0 application
  • 如何使用现代.fxml和controller.java在javafx 2.x中制作自动完成组合框[重复]

    这个问题在这里已经有答案了 如何使用现代 fxml 和controller java 在 javafx 2 x 中制作一个类似的自动完成组合框 就像制作这个一样 http blog ngopal com np 2011 07 04 auto
  • 在 Javafx 中单击内部时,透明舞台不应最小化

    我正在学习在 JavaFx 中创建屏幕录制应用程序 我希望用户调整矩形的大小来决定屏幕捕获区域 我已将舞台和场景设为透明primaryStage initStyle StageStyle TRANSPARENT and scene setF
  • 如何在JavaFX中播放其他视频格式

    我正忙于电影 视频剪辑播放器 库 我想在 JavafX 中做到这一点 几乎 90 的视频剪辑都是 AVI 格式 由于多种原因 我无法隐藏电影 视频剪辑 我还希望该程序能够标记已播放的视频文件 从开始到结束 以便我知道观看了什么 因此程序需要
  • JavaFX 多线程 - 连接线程不会更新 UI

    我正在尝试创建一个加载程序对话框 用户可以在其中知道程序正在加载所请求的内容并且程序正在按预期运行 但正因为如此 我需要join 解析器线程和之前继续主线程 这使得对话框空白 解析器任务 java public class ParserTa
  • 虚拟乐器 iPhone 应用程序中的 VoiceOver 辅助功能?

    我收到盲人用户的评论 称我的一些声音和音乐相关应用程序只能在关闭 VoiceOver 的情况下使用 在 iOS 设备上启用 VoiceOver 辅助功能后 是否可以启用音乐键盘或鼓垫触摸区域 以便在点击键盘键或虚拟鼓组 等 时可以立即播放音
  • Flash AS3 EventDispatcher - 有什么方法可以获取已注册侦听器的列表吗?

    有没有什么方法可以获取注册监听器的列表EventDispatcher 我知道EventDispatcher有hasEventListener方法告诉您是否注册了任何侦听器 但是有没有一种简单的方法来询问EventDispatcher找出听众
  • 如何将函数附加到弹出窗口关闭事件(Twitter Bootstrap)

    我做了一些搜索 但我只能认为我可以将事件附加到导致其关闭的按钮 https stackoverflow com questions 13205103 attach event handler to button in twitter boo
  • 为什么 XRecordDisableContext() 不起作用?

    void Callback XPointer XRecordInterceptData pRecord std cout lt lt my logs n int main if auto const pDisplay XOpenDispla
  • 为什么 DragHandler exportAsDrag 禁用我的 MouseMotionListener?

    我想实现一个简单的 JComponent 拖放 并带有 O Reilly Swing Hacks 的预览 我的问题是 如果 TransferHandler 启动 Drag MouseMotionListener 停止执行 mouseDrag
  • jQuery 更改输入类型=“文件”的方法

    我试图 100 接受 jQuery 因为它简单而优雅的 API 但我遇到了 API 和直接 HTML 之间的不一致 我无法弄清楚 我有一个 AJAX 文件上传器脚本 可以正常运行 我想在每次文件输入值更改时运行该脚本 这是我的工作代码
  • 如果子视图返回 false,则让父视图采用 MotionEvents

    我有一个应用程序需要以不寻常的方式处理事件 对于我的问题 我首先解释一个简单的情况 Android当前的事件处理系统不适合我 假设我有一个 FrameLayout 从现在起我将称为 ViewSwiper 添加到其上的所有视图都是 MATCH
  • 我应该使用带有backbone.js的中央事件总线吗?

    我目前正在开发我的第一个backbone js 应用程序 事件的概念对我来说非常熟悉 但我不确定是否应该使用中央事件调度程序 一般来说 我看到这两种方法 直接将事件发布者和事件接收者连接在一起 我从这种方法开始 使用事件总线并将发布者和接收
  • JavaFX 控制器如何访问其他服务?

    我将 JavaFX 2 与 Scala 一起使用 我有class Application extends javafx application Application它执行诸如读取应用程序配置等操作 然后它会启动主窗口 该主窗口需要连接到一
  • 通过 Scriptaculous 拖放防止 JavaScript 点击事件

    我的页面上有一些可拖动的元素 这些相同的元素有一个导航到另一个页面的点击事件 我试图确定在用户拖动时防止触发单击事件的最佳方法 但如果不拖动则仍然允许单击事件 有人对实现这一目标的最佳方法有任何想法吗 我通过使用类似以下内容解决了这个问题
  • 当用户从android后台删除应用程序时如何检测事件?

    当用户从后台删除我的应用程序时 我需要重置通知 所以我需要一个从后台删除应用程序的事件 请帮帮我 建议表示赞赏 谢谢 亲切的问候 官方安卓文档 Activity onDestroy 您的活动被销毁之前收到的最后一个电话 发生这种情况的原因可
  • Java:作为 JAR 运行时的文件路径

    我有一个 Java JavaFX 项目 我在其中使用样式表 样式表中的图像将按如下方式加载 pane fx background image url packagename image jpg 当我从 Eclipse 或 Scenebuil

随机推荐

  • Jenkins + Gerrit 触发器未自动构建

    Jenkins 似乎不会自动引入需要 Gerrit 审核的更改 我们正在使用 Gerrit 触发器 另外 如果我尝试手动触发一些 似乎什么也没有发生 Gerrit Trigger管理区域中的 控制 似乎没有多大 闪烁 启动 停止 或 重新启
  • 三.js、PointerLock和碰撞检测

    我正在开发一个 3D 虚拟家庭项目 除了碰撞检测之外 一切正常 我使用 PointerLockControls 来控制相机和移动 但我不确定如何检测每个可能方向的碰撞 为简单起见 我从与 0 0 0 上的简单立方体的向前和向后碰撞开始 ra
  • Asp.net Identity,生成 WebApi 令牌 OAuthGrantResourceOwnerCredentialsContext - 无法使用 Unity 访问 UserManager

    我正在尝试设置一个项目结构 以便拥有 WebApi WebUI 和域层 我已将所有 Asp Net Identity 对象移至 Domain 层 并在此处设置了 ApplicationContext 继承自 IdentityContext
  • 如何针对 IE 进行优化?

    我有一个 JS 密集型应用程序 它在 IE 中运行缓慢 我将花费大约一周的时间来优化 IE 并且我想要一些关于尝试的方向 我发现这个线程引用Drip https ieleak svn sourceforge net svnroot iele
  • 为什么byteArray的长度是22而不是20?

    我们尝试从字符串转换为Byte 使用以下 Java 代码 String source 0123456789 byte byteArray source getBytes UTF 16 我们得到一个长度为 22 字节的字节数组 我们不确定这个
  • pip 安装最新的依赖版本

    当我使用安装包时pip install e 它仅安装不满足的依赖项并忽略依赖项升级 如何在每次运行时安装最新的依赖版本pip install e 我尝试过使用pip install upgrade e 但是使用这个选项没有任何改变 我仍然得
  • Angular/ HTML5 到 iOS WKWebView 通信

    我们正在尝试看看发送信号的最佳选择是什么To iOS WKWebView fromAngular 6 HTML5 项目 任何示例都会很棒 我们想要做的是 我们在 Angular 网页上有一个按钮 单击该按钮应该通知 iOS 执行某些操作 我
  • 正确显示mySQL一对多查询结果

    我有两张桌子 TRIPS tripID clientID and LEGS legID depart arrive tripID TRIPS 与 LEGS 具有一对多关系 因为有多个legID s per tripID 我需要以以下格式显示
  • 通过 Javascript 更改 Webkit 属性?

    请帮助我 可能是因为我对 CSS 动画和 Javascript 相当陌生 但我使用的代码应该更改它的属性 当我运行代码时 它会执行代码中的所有其他操作 除了更改所需 div 的 CSS 属性 我已经尝试了所有这四种方法 但似乎都不起作用 它
  • sudo 和 pip 不在同一路径上

    pip and sudo不在我的计算机上的同一路径上 因此当 基本上一直 我需要运行这两个命令时 如下所示 sudo pip install xxx I get sudo pip command not found pip下载软件包 但由于
  • 如何在普通 C89 中读取给定字符长度的 UTF-8 字符串?

    我正在用纯 C89 编写一个自定义的跨平台简约 TCP 服务器 但我也会接受 POSIX 特定的答案 服务器使用 UTF 8 字符串 但从不查看它们的内部 它将所有字符串视为不可变的二进制 blob 但现在我需要接受来自客户端的 UTF 8
  • 如何使用 FS2 中的分类器函数对对象进行分组?

    我有一个无序的流measurements 我想将其分组为固定大小的批次 以便以后可以有效地保留它们 val measurements for id lt Seq foo bar baz value lt 1 to 5 yield id va
  • 让 Pytest 在 Django cookiecutter / Python 3.x 项目中运行

    我正在建造一个新的cookiecutter django https github com pydanny cookiecutter django项目 这里有本地设置说明 http cookiecutter django readthedo
  • Bank 在字长方面存在冲突

    我读过一些关于共享内存的好文章 但我对银行冲突有初步疑问 据说 如果线程 1 和线程 2 从存储体 0 访问字 0 则不存在存储体冲突 但如果他们访问不同的单词 就会出现银行冲突 但我的问题是不同的单词如何可以驻留在一个银行中 由于bank
  • 在 ASP.NET 5 中创建基于每个请求控制器/操作的格式化程序

    我正在尝试在我的 ASP Rest API 中实现 HATEOAS 更改ReferenceResolverProvider 问题是 根据我使用的控制器 我想使用不同的ReferenceResolvers 因为我需要对每个控制器采取不同的行为
  • Protractor:单击按钮后如何等待页面完成?

    在测试规范中 我需要单击网页上的按钮 然后等待新页面完全加载 emailEl sendKeys jack passwordEl sendKeys 123pwd btnLoginEl click Here need to wait for p
  • 如何在android上模拟PC的Esc键

    我正在写一个可以在android上玩flash的应用程序 但是我无法模拟ESC键 因为很多flash游戏需要ESC键才能返回主菜单 没有这个键我制作的应用程序将毫无用处 谁能告诉我如何模拟这个 我可以只发送一个密钥代码吗 但我也不知道键码
  • 根据 C++17 标准草案在块作用域中声明为“extern”的函数的链接

    来自C 17 标准草案 http www open std org jtc1 sc22 wg21 docs papers 2014 n4296 pdf 3 5 6 在块作用域中声明的函数名称和在块作用域 extern 中声明的变量名称 声明
  • AWS - 如何从 CloudWatch Alarm 重新启动或重新启动 EC2 实例?

    有时我的应用程序会无缘无故地死掉 我可以使用 CloudWatch 和 CPU 使用指标下降来检测到这一点 此时我想重新启动java应用程序或整个EC2实例 有什么建议我怎样才能实现这一目标 Thanks AWS 云观察 https aws
  • 如何监听场景图节点中的WindowEvent.WINDOW_SHOWN?

    似乎 WindowEvent WINDOW SHOWN 永远不会在场景图中的任何节点上分派 也没有 我能找到的 知道节点何时可见 渲染 显示 例如 测试启动器 java package com example javafx event im