我有基本的 Java 代码来将 JFrame 设置为全屏并更改显示分辨率。此代码与 Oracle 教程中的示例代码相同。
在带有最新 Java 7.0 和 Java 8.0 的 Ubuntu 14.04 上一切正常,但标题栏和菜单栏仍然显示在全屏窗口的顶部。
其他答案建议在 Compiz 管理器中启用“传统全屏支持”,但我已经这样做了,但没有任何改变。
还有其他解决方法吗?
示例代码链接:http://docs.oracle.com/javase/tutorial/extra/fullscreen/examples/MultiBufferTest.java
示例代码使用 Frame 而不是 JFrame,但我还没有使用它们。
最佳答案
如果您不介意使用 JNA,我的做法是:
private static final int _NET_WM_STATE_REMOVE = 0;
private static final int _NET_WM_STATE_ADD = 1;
private static final int TRUE = 1;
public static boolean setFullScreenWindow(Window w, boolean fullScreen) {
X11 x = X11.INSTANCE;
Display display = null;
try {
display = x.XOpenDisplay(null);
int result = sendClientMessage(display, Native.getWindowID(w), "_NET_WM_STATE", new NativeLong(fullScreen ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE), x.XInternAtom(display, "_NET_WM_STATE_FULLSCREEN", false));
return result != 0;
}
finally {
if(display != null) {
x.XCloseDisplay(display);
}
}
}
private static int sendClientMessage(Display display, long wid, String msg, NativeLong data0, NativeLong data1) {
X11 x = X11.INSTANCE;
XEvent event = new XEvent();
event.type = X11.ClientMessage;
event.setType(XClientMessageEvent.class);
event.xclient.type = X11.ClientMessage;
event.xclient.serial = new NativeLong(0L);
event.xclient.send_event = TRUE;
event.xclient.message_type = x.XInternAtom(display, msg, false);
event.xclient.window = new com.sun.jna.platform.unix.X11.Window(wid);
event.xclient.format = 32;
event.xclient.data.setType(NativeLong[].class);
event.xclient.data.l[0] = data0;
event.xclient.data.l[1] = data1;
event.xclient.data.l[2] = new NativeLong(0L);
event.xclient.data.l[3] = new NativeLong(0L);
event.xclient.data.l[4] = new NativeLong(0L);
NativeLong mask = new NativeLong(X11.SubstructureRedirectMask | X11.SubstructureNotifyMask);
int result = x.XSendEvent(display, x.XDefaultRootWindow(display), 0, mask, event);
x.XFlush(display);
return result;
}
您需要将 JNA 和 JNA Platform jar 添加到您的项目中。
这对我在 Kubuntu 14.10 上有效。
我最初编写此代码是我的 vlcj 项目的一部分 https://github.com/caprica/vlcj/blob/vlcj-3.1.0/src/main/java/uk/co/caprica/vlcj/runtime/x/LibXUtil.java .
关于Java全屏独占模式和Ubuntu 14.04,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27909614/