【发布时间】:2010-10-06 05:48:21
【问题描述】:
当我的程序启动时,主窗口会将自己置于上次关闭时的位置。我想修改一些这种行为,所以如果窗口在屏幕外(或部分在屏幕外),它会自行移动到完全在屏幕上。
我已经完美地完成了这项工作。这是代码:
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 );
}
这按预期工作,但有一个很大的例外;它不考虑任务栏。在 Windows 上,如果窗口超出屏幕底部,此代码将更正它,但仍会留下一块窗口被任务栏挡住。
我不知道该怎么做。有没有办法向java询问系统中的任何任务栏,以及它们的宽度/高度是多少?
谢谢,效果很好。
您知道如何获取它,以便在我调用 getScreenSize() 时 Java 将反映我的两个显示器的总屏幕大小吗?现在它返回 1600x1200,而实际上它是 3200x1200,跨越两台显示器。
Java API 建议 GraphicsConfiguration.getBounds() 可以解决问题,但仍会返回矩形 {0, 0, 1600, 1200}。
【问题讨论】: