我有一个JFrame,我设置为全屏,如下所示:
JFrame frame = new JFrame();
frame.setSize(1920, 1080); // Resolution of the monitor
frame.setUndecorated(true);
frame.setVisible(true);
问题是,从这个框架中产生的任何弹出窗口(例如JDialogs)都会在框架后面打开,我只能通过alt-tabbing来访问它们。
此外,我正在运行两个显示器设置,每个显示器都被视为一个单独的显示器。如果在JFrame顶部打开任何窗口,并将鼠标光标移动到第二个监视器,则窗口将消失在JFrame后面。这是在RHEL 6.4上,所以可能是Linux窗口管理问题?还应该注意的是,我没有gnome-panel运行,所以它是一个完全裸的Linux桌面(没有菜单栏,没有任务栏)。
当我的JFrame被装饰时,事情表现正常。也就是说,当我将鼠标光标移动到第二个显示器时,弹出窗口打开,窗口不再消失。
只有当我将JFrame设置为未装饰的和全屏时,Windows才会开始迷失它。就像Linux将未修饰的JFrame“锁定”到监视器上一样。我无法在这种状态下进行alt-drag。
如果我将JFrame设置为略小于显示器分辨率(例如小1像素),则不再“锁定”。我可以用它来拖动它,窗户不再迷失它。
有没有办法阻止Windows在全屏幕后丢失,未修饰的JFrame?
我已经尝试了此处列出的所有解决方案,但它们都不起作用: JFrame full screen focusing .
修改
在Java 7下运行时会出现上述问题。在Java 8下运行会修复对话框问题,但屏幕交叉问题仍然存在。
答案 0 :(得分:0)
使用以下代码解决上述问题
public static void setfullscreen(final JFrame frm)
{
frm.dispose();
/**`enter code here`
* Set the Frame as Undecorated
*/
frm.setUndecorated(true);
/**
* set the Frame's resize property as false
*/
frm.setResizable(false);
frm.requestFocus();
/**
* sets the frame as visible
*/
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
frm.setVisible(true);
}
}
);
Dimension screenSize =
Toolkit.getDefaultToolkit().getScreenSize();
frm.setBounds(0,0,screenSize.width, screenSize.height);
}
/**
* Close the Full Screen Mode
* @param frm
*/
public static void closeFullScreen(final JFrame frm)
{
frm.dispose();
frm.setUndecorated(false);
/**
* sets the frame as resize
*/
frm.setResizable(true);
/**
* sets the frame as visible
*/
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
frm.setVisible(true);
}
}
);
}
</i>