Обработка пользовательского изменения размера, изменения положения в Java Swing - PullRequest
0 голосов
/ 31 августа 2010

В настоящее время я создаю Java Swing GUI и мне было интересно, как обрабатывается изменение размера, управляемое пользователем (скажем, мышью).

Моя проблема в том, что когда я пытаюсь изменить размер моего главного окна или когда какое-либо другое окно открывается поверх моего приложения, то окно моего приложения искажается - все его части не меняются хорошо в ответ на изменение размера или другое окно , У кого-нибудь есть диагностика, с чего начать на это смотреть? Дополнительные вопросы, ресурсы также приветствуются.

Приветствие.

Ответы [ 3 ]

1 голос
/ 31 августа 2010

Хотя Роб прав, что ComponentListener даст вам обратный вызов при изменении размера панели, вам не нужно использовать это, чтобы убедиться, что ваш GUI выглядит правильно. Вместо этого вы должны убедиться, что вы настроили свой LayoutManager соответствующим образом для обработки изменения размера. Это может быть реальная боль в шее, чтобы изменить размер для работы со стандартными макетами; Я очень рекомендую вам проверить MigLayout .

1 голос
/ 31 августа 2010

Моя проблема в том, что когда я пытаюсь изменить размер основного окна или когда какое-либо другое окно открывается поверх моего приложения, окно моего приложения искажается

Ваше окно НЕ должно искажатьсякогда поверх вашего приложения открывается другое приложение.Swing достаточно умен, чтобы перекрасить кадр по мере необходимости.Если он не перерисовывается должным образом, то я думаю, что вы добавили пользовательский код рисования и делаете это неправильно.Единственное, что я могу предложить, это НИКОГДА не переопределять метод paint () фрейма.

Для получения дополнительной помощи вам необходимо опубликовать свой SSCCE , который демонстрирует проблему.

1 голос
/ 31 августа 2010

Добавьте ComponentListener для обработки события componentResized (), то есть

frame.addComponentListener(new ComponentListener() {
    public void componentResized(ComponentEvent e) {       
        // resize other components, refresh, etc 
    }
}

Из JavaDoc:

Когда изменяется размер, расположение или видимость компонента, соответствующий методв слушателе объект вызывается, и ComponentEvent передается ему.События компонента предоставляются ТОЛЬКО в целях уведомления;AWT автоматически обрабатывает перемещения компонентов и изменяет их размеры внутри, так что компоновка графического интерфейса работает правильно, независимо от того, регистрирует ли программа ComponentListener или нет.

См. http://download.oracle.com/javase/1.4.2/docs/api/java/awt/event/ComponentListener.html

...