【问题标题】:Same KeyCode for setting/exiting fullscreen - JavaFx用于设置/退出全屏的相同 KeyCode - JavaFx
【发布时间】:2018-01-30 19:32:53
【问题描述】:

我用这个来setFullScreen():

scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent e) {
            if(e.getCode() == KeyCode.F11) {
                stage.setFullScreen(true);
            }
        }
    });

这一行退出它:

stage.setFullScreenExitKeyCombination(new KeyCodeCombination(KeyCode.F11));

如您所见,我想对两者使用相同的KeyCode (F11)。但它没有正确退出全屏!我猜,它在退出后就设置了全屏。所以它不会关闭 fullScreenMode。

【问题讨论】:

  • 如果在窗口化之前禁用全屏部分会怎样?如果它发生在之后,您可能需要在短暂超时后启用它
  • 难道没有更简单的方法还是只有这种方法?
  • 如果你的理论是正确的(它在窗口化后立即全屏显示),检查它是否窗口化是不够的。最简单的方法是测试它,即if(e.getCode() == KeyCode.F11 &amp;&amp; isWindowed())

标签: java javafx fullscreen keyevent keycode


【解决方案1】:

这是您问题的最简单答案。

scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent e) {
    if(e.getCode() == KeyCode.F11) {
        stage.setFullScreen(!stage.isFullScreen());
    }
}
});

【讨论】:

  • 这有点合乎逻辑,而另一则直截了当。
【解决方案2】:

只需设置一个全屏为真/假的标志即可。

boolean fullScreen = false;            // This is global variable.
scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent e) {
        if(e.getCode() == KeyCode.F11) {
            if(fullScreen)
               stage.setFullScreen(true);
             else
               stage.setFullScreen(false);
            // Toggling fullscreen variable after toggling full screen
            fullScreen = !fullScreen;
        }
    }
});

【讨论】:

  • 虽然可能是最简单的,但它可能不是很健壮。布尔值可能会出现不同步的情况,但最坏的情况是您必须按两次 F11 才能自行纠正
  • 谢谢!我不知道,在这种情况下是什么标志,但我刚刚添加了!stage.isFullScreen()
  • 现在我更新了代码,现在我在切换全屏后更新变量
猜你喜欢
  • 2022-01-24
  • 2021-07-10
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
相关资源
最近更新 更多