Java 如何在 Windows 8 上全屏显示?

9

我在我的类 MainWindow 中有这段代码:

public MainWindow() {
    super("Shouldn't be visible...");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setAlwaysOnTop(true);
    setUndecorated(true);
    setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));

    addFocusListener(new FocusLostExiter());
    addKeyListener(new EscListener());

    setContentPane(canvas);

    getContentPane().setPreferredSize(Toolkit.getDefaultToolkit().getScreenSize());
    pack();
    setResizable(false);
}

public void setFullScreen(boolean b) {
    if(!b) {
        device.setFullScreenWindow(null);
    }
    setVisible(b);
    //System.out.println(device.getFullScreenWindow());
    if(b) {
        device.setFullScreenWindow(this);
    }
}

在Windows 7+Java 6中,全屏功能运行良好,我可以随意点击。然而,在Windows 8+Java 6中,除了靠近顶部的大约100个像素和开始按钮所在的方框之外,最左侧的所有像素都出现了问题。在这一列和方框中,我的光标变成了普通鼠标,窗口忽略了我的点击。在开始菜单中,点击会弹出开始菜单而不是给我的程序发送点击事件。这似乎是Java的问题,因为它在其他地方都能正常工作,只有在W8上出现问题。你知道出了什么问题/如何解决或绕过它吗?

7
Windows 8仍处于测试版阶段,因此不要期望与您的驱动程序和Java虚拟机完全兼容。 - Sibbo
但是我们能期望它被修复吗? - user263078
当Windows 8推出后,他们将会着手修复,或许在之前就完成了 ;) 这个问题必须要解决,但我不知道具体时间。 - Sibbo
Windows 8与Windows 7不同。它旨在与移动设备兼容。然后,它的工作方式是另一种方式,尚不兼容JVM。 - Anderson Carniel
2
如果它在所有地方都能正常工作,但在W8上不能,我会说这是Win8的问题,而不是Java的问题。 - Unai Vivi
1
笨蛋,你试过在Windows 8上安装Java 7吗? - David Kroukamp
6个回答

1
public NewFrame(){

    this.setDefaultCloseOperation(EXIT_ON_CLOSE);

    this.setSize(Toolkit.getDefaultToolkit().getScreenSize());

    this.setVisible(true);

}

1
我以前遇到过类似的问题,在Windows机器上窗口底部被裁剪,添加以下代码解决了这个问题:
frame.setLocationByPlatform(true);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

假设您的MainWindow类扩展了JFrame,调用这两个方法应该就可以解决问题了。

0

从未正确回答过这个问题...这是Windows 8上JRE的问题。现在已经解决了。


0

如果你的MainWindow类是一个JFrame,那么你不需要使用getContentPane()。我认为你也不需要setFullScreen函数。


0

尝试全屏显示,通常建议使用原始屏幕尺寸的一半宽度和高度

Toolkit toolkit = Toolkit.getDefaultToolKit();

Dimension d = toolkit.getScreenSize();

int w = d.width;

int h = d.height;

setSize(w,h);

0

你可以轻松地将这个放在你的构造函数里面

 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
 setBounds(0,0,screenSize.width, screenSize.height);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接