Почему / Когда вызывается ComponentListener.componentShown ()? - PullRequest
3 голосов
/ 16 сентября 2009

Почему этот код никогда не печатает "Hello2"?

public class Test4 {

    public static void main(String[] args) {
        JFrame f = new JFrame();
        JPanel p = new JPanel();
        f.getContentPane().add(p);

        JLabel x = new JLabel("Hello");
        p.add(x);

        p.addComponentListener(new ComponentListener() {

            public void componentResized(ComponentEvent arg0) {
                 System.err.println("Hello1");
            }

            public void componentMoved(ComponentEvent arg0) {
            }

            public void componentShown(ComponentEvent arg0) {
                System.err.println("Hello2");
            }

            public void componentHidden(ComponentEvent arg0) {
            }
        });

        f.setVisible(true);
        f.pack();
    }
}

Ответы [ 3 ]

3 голосов
/ 16 сентября 2009

Я предполагаю, что он вызывается, когда состояние видимости реального объекта изменяется. в этом случае вы изменяете видимость фрейма, а не панели. (по умолчанию рамка начинается скрытой, но панели видны) попробуйте добавить слушателя в кадр.

2 голосов
/ 16 сентября 2009

Определение AWT «видимого» может быть немного нелогичным. Из Javadoc java.awt. Компонент # isVisible:

"Components are initially visible, with the exception of top level components such as
 Frame objects."

Согласно этому описанию, p<code> is already visible <b>before</b> you add the ComponentListener. In fact, you can verify this if you insert a</p> <pre><code>System.out.println(p.getVisible());

в любом месте перед вызовом f.setVisible (true) . В этом смысле видимость не изменяется при отображении кадра, и поэтому componentShown (..) не вызывается.

0 голосов
/ 16 сентября 2009

Из Учебники по Java

Компонент скрытый и показанные компонентом события происходят только как результат обращения к компоненту метод setVisible. Например, окно может быть миниатюрным в значок (иконка) без запускается событие скрытого компонента.

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