Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mac:JPanel:requestFocusInWindow()返回false,但对于全屏JFrame,isDisplayable()、isFocusable()和isVisible()不返回false_Java_Macos_Focus_Jframe_Fullscreen - Fatal编程技术网

Java Mac:JPanel:requestFocusInWindow()返回false,但对于全屏JFrame,isDisplayable()、isFocusable()和isVisible()不返回false

Java Mac:JPanel:requestFocusInWindow()返回false,但对于全屏JFrame,isDisplayable()、isFocusable()和isVisible()不返回false,java,macos,focus,jframe,fullscreen,Java,Macos,Focus,Jframe,Fullscreen,2013年3月11日解决: 事实证明,我使用的是Mac电脑,这是一个问题,我在上面找到了答案。希望这能帮助其他有同样问题的Mac用户 我已经创建了一个需要在JPanel中聚焦的游戏,但是自从我制作了我的JFrame全屏后,游戏面板mainPanel就无法接收聚焦。本质上,我所拥有的是这样的SSCCE: 对于输出: mainPanel is displayable : true mainPanel is focusable : true mainPane

2013年3月11日解决:

事实证明,我使用的是Mac电脑,这是一个问题,我在上面找到了答案。希望这能帮助其他有同样问题的Mac用户

我已经创建了一个需要在JPanel中聚焦的游戏,但是自从我制作了我的JFrame全屏后,游戏面板mainPanel就无法接收聚焦。本质上,我所拥有的是这样的SSCCE:

对于输出:

mainPanel is displayable      :      true
mainPanel is focusable        :      true
mainPanel is visible          :      true
mainPanel can request focus   :     false
根据Eclipse对Component.requestFocusInWindow的定义:

如果此组件的顶级祖先已经是焦点窗口,则请求此组件获取输入焦点。此组件必须可显示、可聚焦、可见,并且其所有祖先(顶层窗口除外)都必须可见,才能授予请求。将尽一切努力履行这一要求;然而,在某些情况下,这样做可能是不可能的。在该组件收到焦点事件之前,开发人员决不能假定该组件是焦点所有者

具体地说,也许除了这一点之外,我还创建了一个MyPanel类,它扩展了JPanel并实现了AcionListener和Runnable。我用MainPanel扩展了这个类,并在全屏JFrame中添加了一个MainPanel对象

主面板是我控制和显示游戏的地方,它有一个键盘监听器。在我制作我的JFrame全屏游戏之前,游戏运行得非常好,但现在的问题是它无法接收焦点,即使游戏中的一切仍然在运行,敌人仍然在屏幕上追逐玩家,但玩家无法响应

我在父类MyPanel中添加了一个focuslistener,但它从未失去或获得过焦点,直到我直接使用mainPanel.requestFocus,但输出告诉我它获得了焦点,然后立即失去了焦点。我甚至在JFrame上尝试了setFocusablefalse

当我在JFrame上使用setVisibletrue,然后重新验证时,输出发生了变化,我被告知mainPanel.requestFocusInWindow变为true。然后输出告诉我主面板获得焦点,失去焦点,然后再次获得焦点。然而,在整个过程中,我的mac电脑每次按键都会发出嘟嘟声。有时,requestFocusInWindow返回false,但它仍然表示主面板获得、丢失,然后最终获得焦点

在关于requestFocusInWindow的文档的第二部分中,它说:

此方法返回一个布尔值。如果返回false,则保证请求失败。如果返回true,则请求将成功,除非它被否决,或者在本机窗口系统授予请求之前发生异常事件,如组件的对等处理。同样,虽然返回值true表示请求可能成功,但在该组件收到焦点事件之前,开发人员决不能假定该组件是焦点所有者

这一部分是我无法理解的,所以即使你不能解决这个问题,如果你知道这意味着什么,这可能会让我走上正确的道路

如果我找到解决方案,我将发布此问题的更新

mainPanel is displayable      :      true
mainPanel is focusable        :      true
mainPanel is visible          :      true
mainPanel can request focus   :     false