我有一个Java FX应用程序,其中显示包含文本字段的Popup。即使用户点击它,我也会故意保持此弹出窗口可见。除了一个案例之外,这个工作正常:
当用户专注于弹出窗口中的文本字段时,单击单独的应用程序,然后单击返回文本字段。 FX应用程序无法从操作系统重新获得关注。如果用户在键盘上键入,则另一个应用程序仍将接收键盘输入。要解决此问题,用户必须单击弹出窗口外的主FX应用程序窗口。
奇怪的是,在调试中,我可以看到Popup中的文本字段正在获得焦点,但操作系统并未显示FX应用程序现在处于焦点。有没有办法可以强制操作系统将焦点转移到我的应用程序?
这种情况发生在Windows和Mac上。我测试了jdk 8 update 45和jdk 8 update 92。
我用最少的Popup进行了测试:
static class TestPopup extends Popup {
TestPopup() {
content.add(new TextField("Hello"))
}
}
我通过致电来表明:
new TestPopup().show(somePaneInMainWindow, 0, 0)
答案 0 :(得分:0)
经过一番研究后,我发现这是预期的行为。
在此处找到答案: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8123137
从链接:
这是正确的行为。所有JavaFX弹出窗口都是 不可聚焦,所以只有在所有者窗口的情况下,它们才能接收输入 目前专注。通常弹出窗口设置为自动隐藏,当主人 没有重点,但在这个测试中不是这样,所以弹出窗口 只是呆在那里。