使JavaFX窗口处于活动状态

时间:2015-01-22 10:33:20

标签: javafx

我正在尝试通过特定的按键创建一个JavaFX应用程序(在后台运行以显示(设置可见))并立即使窗口成为活动窗口。因此,我设置了主要阶段alwaysOnTop-property true,调用stage.toFront(),最后调用stage.requestFocus()。之后我请求焦点为文本字段。当窗口可见时,我想立即开始在文本字段中键入内容。

然而,当我例如选择了Ubuntu终端并使窗口可见并开始输入时,应用程序显示在所有内容之上,但是,键入到终端。应用程序窗口未激活!然而,舞台的焦点属性是true。这是一个错误还是我错过了什么?它与操作系统有关吗?


编辑:我愿意为我现在正在使用的这个问题提供一些小问题,因为互联网建议,很多人都面临这个问题:自从我正在使用Linux机器我可以访问精彩的工具wmctrl。它是大多数标准存储库的一部分。 wmctrl -a WINDOWNAME设置名为WINDOWNAME的窗口处于活动状态。现在,当我需要窗口激活时,我只需从源代码中调用此工具。因为这比任何其他东西都更糟糕,我肯定想要摆脱它。

2 个答案:

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