我有基本的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,但我还没有使用它。
答案 0 :(得分:2)
如果您不介意使用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。
我最初在此https://github.com/caprica/vlcj/blob/vlcj-3.1.0/src/main/java/uk/co/caprica/vlcj/runtime/x/LibXUtil.java编写了此代码作为我的vlcj项目的一部分。