Когда компонент Swing «отображается»? - PullRequest
5 голосов
/ 18 мая 2009

Есть ли способ (например, через событие?) Определить, когда компонент Swing становится «отображаемым» - согласно Javadocs для Component .getGraphics ?

Причина, по которой я пытаюсь это сделать, заключается в том, чтобы я мог затем вызвать getGraphics() и передать это моей «стратегии рендеринга» для компонента.

Я попытался добавить ComponentListener, но, похоже, componentShown не вызывается. Могу ли я попробовать что-нибудь еще?

Спасибо.

И, кроме того, нормально ли удерживать объект Graphics, который я получаю? Или есть вероятность, что новый будет создан позже при жизни Component? (например, после изменения размера / скрытия?)

Ответы [ 4 ]

3 голосов
/ 18 мая 2009

Добавить HierarchyListener

public class MyShowingListener {
private JComponent component;
public MyShowingListener(JComponent jc) { component=jc; }

public void hierarchyChanged(HierarchyEvent e) {
    if((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED)>0 && component.isShowing()) {
        System.out.println("Showing");
    }
}
}

JTable t = new JTable(...);
t.addHierarchyListener(new MyShowingListener(t));
1 голос
/ 18 мая 2009

Вы можете прослушать событие изменения размера. Когда компонент отображается в первый раз, его размер изменяется от 0,0 до того, который определяет менеджер макета (если он есть).

0 голосов
/ 19 мая 2009

Я всегда использовал Coomponent.addNotify, чтобы знать, когда компонент готов к визуализации. Не уверен, что это лучший способ, но он работает для меня. Конечно, вы должны создать подкласс компонента.

Component.isDisplayable должен быть правильным ответом, но я знаю, что он не сработал для меня, как я думал, что это будет (я не помню почему, но что-то было, и я переключился на addNotify).

Глядя в исходный код SUN, я вижу, что addNotify запускает HierarchyEvent.SHOWING_CHANGED, так что это лучший способ получить уведомление.

0 голосов
/ 18 мая 2009

Вам необходимо проверить иерархию компонентов. Проверьте после AncestorListener.ancestorAdded .

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