Почему я не могу проверить JComponent? - PullRequest
2 голосов
/ 03 декабря 2011

С JavaDoc :

public void validate()

Проверяет этот контейнер и все его подкомпоненты. Проверка контейнера означает размещение его подкомпонентов.

Это то, что я хочу сделать. С максимально легким компонентом, насколько это возможно. Но когда я делаю это с JComponent, вызов validate() не делает компонент «действительным».

    JComponent c = new JComponent() {};
    System.out.println(c.isValid()); // false
    c.validate();
    System.out.println(c.isValid()); // false

Почему я не могу сделать JComponent действительным?

Ответы [ 3 ]

4 голосов
/ 03 декабря 2011

В документах для isValid() написано:

Компонент действителен, если он имеет правильный размер и помещен в его родительский контейнер, и все его дочерние элементы также допустимы.

Это так до тех пор, пока вы не достигнете Контейнер верхнего уровня (JFrame, JInternalFrame или JApplet). В примере, который у вас есть в вашем вопросе, у вашего JComponent нет родителя, поэтому он никогда не может быть действительным.

0 голосов
/ 03 декабря 2011

Чтобы подытожить сказанное в ответах, не забудьте переопределить метод getPreferedSize(), чтобы вернуть предпочтительный размер компонента. В противном случае менеджер компоновки не будет позиционировать ваш JComponent, следовательно, не будет отображаться.

0 голосов
/ 03 декабря 2011

Javadoc для java.awt.Component.isValid() состояний:

Компонент действителен, если он имеет правильный размер и расположен в родительском контейнере, и все его дочерние элементы также допустимы.

Короче говоря, вы не можете проверить компонент, пока он не будет добавлен в контейнер.

...