【发布时间】:2015-05-11 01:11:46
【问题描述】:
我正在创建一个文件编辑应用程序,每个文件当前都有自己的 JFrame。有很多关于使框架全屏的问题,它在我的应用程序中运行良好。但是,当我从全屏关闭框架时出现问题。
通常,我将默认关闭操作设置为EXIT_ON_CLOSE。当框架关闭时,应用程序退出并关闭全屏空间,让我回到我的桌面。但是,当我将其保留在 HIDE_ON_CLOSE 或将其设置为 DISPOSE_ON_CLOSE(这是我真正想要的)时,关闭全屏 JFrame 会留下黑屏。我仍然可以在屏幕之间滑动,查看 Dock 和菜单栏等,但如果有另一个框架打开,它会一直留在那里,直到我退出应用程序。
这是一个例子:
package net.kittycat3141.helpers;
import javax.swing.JFrame;
import net.kittycat3141.lib.util.OSXTools;
/**
* @author Kittycat3141
*/
public class MCVP_FullScreenJFrame extends JFrame {
private static final long serialVersionUID = -6467532883940003341L;
public static void main(String[] args) {
JFrame a = new MCVP_FullScreenJFrame();
OSXTools.enableFullscreen(a);
a.setVisible(true);
JFrame b = new MCVP_FullScreenJFrame();
OSXTools.enableFullscreen(b);
b.setVisible(true);
}
}
OSXTools.enableFullscreen(JFrame) 这样做:
if(isRunningOnMac()) {
Class util;
try {
util = Class.forName("com.apple.eawt.FullScreenUtilities");
Class params[] = new Class[]{Window.class, Boolean.TYPE};
Method method = util.getMethod("setWindowCanFullScreen", params);
method.invoke(util, frame, true);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
如果您运行程序并将两个帧都设为全屏,然后关闭其中一个,您最终会出现黑屏。您仍然可以滑动到其他应用程序/桌面等,但在程序终止之前它不会消失。
如何正确关闭 JFrame 以使其他框架保持打开状态,但黑色空间不会留在那里?
我正在运行 OS X Yosemite 和 Java 7。
【问题讨论】:
-
你是如何设置全屏的?你是如何关闭全屏帧的?
-
我正在使用
FullScreenUtilities类并通过反射访问它。对于关闭,我只是在做setDefaultCloseOperation(DISPOSE_ON_CLOSE);,所以用户可以点击红色的 X 来关闭框架。 -
考虑提供一个runnable example 来证明您的问题。这不是代码转储,而是您正在做的事情的一个示例,它突出了您遇到的问题。这将导致更少的混乱和更好的响应
-
好的。我正在考虑,但如果没有帮助,我不想麻烦。
-
我无法访问
FullScreenUtilities,所以很难知道发生了什么,并且至少有两种方法可以为使用 Java 的 MacO 提供全屏支持 ;)
标签: java macos jframe fullscreen