Как я могу ждать, пока компонент будет показан в Java? - PullRequest
4 голосов
/ 06 августа 2009

У меня есть компонент (JPanel) внутри Window. Я всегда получаю false при звонке panel.isShowing(), при вызове из события windowGainedFocus() (когда родительское окно получает фокус).

Я предполагаю, что когда вызывается событие windowGainedFocus(), рисование JPanel в этом Window еще не было закончено.

Я пытался поместить этот вызов isShowing() в метод paint() этого Window, но я всегда получаю isShowing() = false.

Есть ли способ получить событие, когда JPanel полностью отображается на экране и метод isShowing() вернет true?

Спасибо

Ответы [ 3 ]

12 голосов
/ 06 августа 2009

Возможно, вам лучше всего подойти к этому с слушателем иерархии на самой панели:

panel.addHierarchyListener(new HierarchyListener() {
    public void hierarchyChanged(HierarchyEvent e) {
        if ((HierarchyEvent.SHOWING_CHANGED & e.getChangeFlags()) !=0 
             && panel.isShowing()) {
          //do stuff
        }
    }
});
1 голос
/ 06 августа 2009

Если вы не хотите событие, но имеете какой-то определенный код, который необходимо запустить после отрисовки вашего компонента, вы можете переопределить addNotify(), который вызывается, чтобы сделать компонент отображаемым. Пример:

public void addNotify()
{
    super.addNotify();
    // at this point component has been displayed
    // do stuff
}
0 голосов
/ 06 августа 2009

Ваш компонент будет полностью отображен после получения WindowListener.windowActivation. Вы также столкнетесь с проблемами синхронизации и условиями гонки, пытаясь назначить фокус перед событием windowActivation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...