我需要有一个未修饰的JFrame( setUndecorated(true) ),需要全屏显示,而不会与任务栏重叠。
我尝试了以下解决方案。
调用setExtendedState(MAXIMIZED_BOTH)。
按Does JFrame.setExtendedState(MAXIMIZED_BOTH) work with undecorated frames?
中所述尝试了以下解决方案 GraphicsConfiguration config = aFrame.getGraphicsConfiguration();
Rectangle usableBounds = SunGraphicsEnvironment.getUsableBounds(config.getDevice());
aFrame.setBounds(0, 0, usableBounds.width, usableBounds.height);
非常感谢任何帮助。
我想到了一个设计。但不确定其可行性。我可以使用setBounds()。但是,当调整任务栏或重新定位任务栏时,我需要通知我的框架。有办法吗?
答案 0 :(得分:6)
能够使用以下代码解决上述问题,
Rectangle usableBounds = SunGraphicsEnvironment.getUsableBounds(config.getDevice());
setMaximizedBounds(usableBounds);
setExtendedState(MAXIMIZED_BOTH);
所以通过getUsableBounds
我能够获得离开任务栏的界限。因此我正在使用setExtendedState(MAXIMIZED_BOTH)
当我重新调整/重新定位任务栏时,窗口会自动更新。 : - )
答案 1 :(得分:0)
final Point x = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
有一个单独的线程来检查任务栏是否被更改。如果是这样更新大小
new Thread(new Runnable() {
@Override
public void run() {
if (x.equals(GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint())) {
Rectangle r = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
setSize(r.getSize());
}
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}).start();