Как получить максимальный размер Jframe, в котором JDesktopPane также максимизирован?

У меня отображается «внутренняя рамка входа» при запуске приложения. Но проблема в том, что она не отображается по центру экрана приложения.

Мой код для получения фактического размера рабочего стола и установки местоположения JInternalFrame выглядит следующим образом

частная пустота new_init () {

  LoginInternal login = new LoginInternal(jMenuBar1); 
  Dimension desktopSize = this.getSize();
  Dimension jInternalFrameSize = login.getSize();
  System.out.println("desktopSize: "+desktopSize+" jInternalFrameSize:" +jInternalFrameSize );
  jMenuBar1.setVisible(false);
  login.setLocation((desktopSize.width - jInternalFrameSize.width)/2,(desktopSize.height- jInternalFrameSize.height)/2);
  jDesktopPane1.add(login); 
  login.show();
}

У меня разрешение экрана 1366х768. Но согласно отпечатку, который я поставил

"desktopSize: java.awt.Dimension [ширина = 1024, высота = 768] jInternalFrameSize: java.awt.Dimension [ширина = 398, высота = 286]"

Я получаю разрешение 1024x768. В коде предварительной инициализации JDesktopPane я установил «setExtendedState (JFrame.MAXIMIZED_BOTH);»

Теперь я открываю оба в развернутом режиме, но фрейм входа не центрирован, так как он использует логику центрирования с разрешением «[ширина = 1024, высота = 768]». Если он использует мое текущее разрешение экрана, я думаю, что он будет центрирован.

Надеюсь, я ясно дал понять. Где я ошибаюсь?


person user3066876    schedule 14.12.2013    source источник


Ответы (1)


он не отображается по центру экрана приложения.

LoginInternal login = new LoginInternal(jMenuBar1); 
Dimension desktopSize = this.getSize();
Dimension jInternalFrameSize = login.getSize();

Размер компонента по умолчанию (0, 0) при его создании. Не могу сказать, устанавливает ли ваш код конструктора размер или нет.

У меня отображается «внутренний фрейм входа» при запуске приложения.

По этой причине не используйте JInternalFrame. Используйте модальный JDialog. Основной код:

JDialog dialog = new JDialog(...);
dialog.add(...);
dialog.pack();
dialog.setLocationRelativeTo( null );
dialog.setVisible( true );
person camickr    schedule 14.12.2013
comment
Спасибо, но теперь я использовал JInternalFrame во всем своем приложении, и теперь его трудно изменить. Есть ли вообще с существующим кодом? - person user3066876; 14.12.2013
comment
Is there anyway with the existing code? - Я не знаю, как выглядит ваш существующий код. Я предположил, в чем, по моему мнению, проблема. Вам нужно рассчитать местоположение ПОСЛЕ того, как все компоненты имеют допустимый размер. Поэтому вам нужно указать размер внутренней рамы, прежде чем выполнять расчет. - person camickr; 14.12.2013
comment
Внутренняя рамка имеет размер jInternalFrameSize:java.awt.Dimension[width=398,height=286]. В чем проблема: this.getSize() -> получает размер 1024x768, но мое фактическое разрешение 1366x768, поэтому центрирование ошибаться - person user3066876; 14.12.2013
comment
@user3066876, опубликуйте свой SSCCE, демонстрирующий проблему. - person camickr; 15.12.2013