当我的程序启动时,主窗口将它自己放在上次关闭时的位置。我想修改这个行为,所以如果窗口在屏幕外(或部分屏幕外),它会自动移动到屏幕上。Java:在桌面上放置一个窗口时考虑任务栏/菜单栏/等?
我已经完美地完成了这项工作。下面的代码:
int x = gameConfig.windowX;
int y = gameConfig.windowY;
int width = gameConfig.windowWidth;
int height = gameConfig.windowHeight;
if(x < 0) x = 0;
if(y < 0) y = 0;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
if(x + width > screenSize.width) x = screenSize.width - width;
if(y + height > screenSize.height) y = screenSize.height - height;
if(width > screenSize.width) width = screenSize.width;
if(height > screenSize.height) height = screenSize.height;
this.setLocation(x, y);
this.setSize(width, height);
if(gameConfig.screenMaximized) {
this.setExtendedState(getExtendedState() | MAXIMIZED_BOTH);
}
可正常工作,但是有一个很大的例外;它不占任务栏。在窗口上,如果窗口超过了屏幕底部,此代码将纠正它,但它仍然留下任务栏阻塞的一部分窗口。
我不知道如何做到这一点。有人问java关于系统中的任何任务栏,以及它们的宽度/高度是多少?
非常感谢您的工作。
你知道如何获得它,所以当我调用getScreenSize()时,Java将反映我的两个监视器的总屏幕大小?现在,它返回1600x1200,当它真的是3200x1200,横跨两台显示器。
Java API建议GraphicsConfiguration.getBounds()可以做到这一点,但仍会返回矩形{0,0,1600,1200}。
“任务栏可能在屏幕的任何边缘” - 这是我正在讨论的任务栏(在屏幕的右侧)。太多的应用程序*强迫我将它移动到左边(arghh!),并且仍有一些不能正常工作。 – 2009-02-08 09:22:08
是的 - 虽然Sun并没有帮助我们,但是一直等到Java 4才能够确定哪些地方出现了问题。 – 2009-02-08 21:47:54