Когда моя программа запускается, главное окно размещается там, где оно было, когда оно в последний раз закрывалось. Я хочу изменить это поведение, поэтому, если окно находится за пределами экрана (или частично за пределами экрана), оно полностью переходит на экран.
У меня это отлично работает. Вот код:
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 о каких-либо панелях задач в системе, и какова их ширина / высота?
Спасибо, что отлично сработало.
Знаете ли вы, как получить его, чтобы Java отображала общий размер экрана обоих моих мониторов при вызове getScreenSize ()? Прямо сейчас он возвращает 1600x1200, тогда как на самом деле это 3200x1200, на двух мониторах.
Java API предлагает, чтобы GraphicsConfiguration.getBounds () справилась бы с задачей, но все равно возвращает прямоугольник {0, 0, 1600, 1200}.