我正在尝试通过特定的按键创建一个JavaFX应用程序(在后台运行以显示(设置可见))并立即使窗口成为活动窗口。因此,我设置了主要阶段alwaysOnTop-property true
,调用stage.toFront()
,最后调用stage.requestFocus()
。之后我请求焦点为文本字段。当窗口可见时,我想立即开始在文本字段中键入内容。
然而,当我例如选择了Ubuntu终端并使窗口可见并开始输入时,应用程序显示在所有内容之上,但是,键入到终端。应用程序窗口未激活!然而,舞台的焦点属性是true
。这是一个错误还是我错过了什么?它与操作系统有关吗?
编辑:我愿意为我现在正在使用的这个问题提供一些小问题,因为互联网建议,很多人都面临这个问题:自从我正在使用Linux机器我可以访问精彩的工具wmctrl
。它是大多数标准存储库的一部分。 wmctrl -a WINDOWNAME
设置名为WINDOWNAME
的窗口处于活动状态。现在,当我需要窗口激活时,我只需从源代码中调用此工具。因为这比任何其他东西都更糟糕,我肯定想要摆脱它。
答案 0 :(得分:0)
如果您的节点无法集中注意力,请尝试在requestFocus()
中包裹Runnable
并致电Platform.runLater()
:
final TextField text = new TextField();
Platform.runLater(new Runnable() {
@Override
public void run() {
text.requestFocus();
}
});
答案 1 :(得分:0)
不完美,但确实有效:
Platform.runLater(() ->
{
//primaryStage.setAlwaysOnTop(true);
//primaryStage.setAlwaysOnTop(false);
primaryStage.setIconified(true);
primaryStage.setIconified(false);
});