我在让我的 Java JFrame 在所有操作系统(Windows、Mac、Linux)上全屏显示时遇到了一些问题。似乎我发现的任何解决方案都可以在一个操作系统上运行,但不能在其他操作系统上运行,或者有一些其他严重的错误。我想使用 setFullScreenWindow(window w) 方法正确启动全屏,因为 setExtendedState(...) 在 Mac/Linux 上不起作用,因为菜单栏和任务栏仍然可见。
setFullScreenWindow(...) 方法在所有环境中都可以正常工作,直到 Java 7 出现,现在似乎存在一个问题,即一旦您进入全屏模式,应用程序就不再响应 Mac OS X 上的关键事件。应用程序工作在 Windows 上就好了。
有谁知道我怎么可能解决这个问题?
注意: 此处描述的解决方法(FullScreen Swing Components Fail to Receive Keyboard Input on Java 7 on Mac OS X Mountain Lion)不适用于 Windows,因为它会导致 JFrame 闪烁并且无法正确打开。
此处描述的全屏方法与下面使用的方法相同,但由于键输入问题而无法使用:(如何使 JFrame 真正全屏?)
示例代码:
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.KeyStroke;
public class FullScreenKeyTest extends JFrame {
public void createFrame() {
initKey();
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
this.setUndecorated(true);
this.setVisible(true);
gd.setFullScreenWindow(this);
}
private void initKey() {
Action keyAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
System.out.println("Escape key pressed");
setVisible(false);
System.exit(0);
}
};
this.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "keyPress");
this.getRootPane().getActionMap().put("keyPress", keyAction);
}
public static void main(String[] args) {
FullScreenKeyTest testFrame = new FullScreenKeyTest();
testFrame.createFrame();
}
}