Компонент не виден - PullRequest
       11

Компонент не виден

2 голосов
/ 13 марта 2012

Я работаю над проектом на качелях, и у меня есть класс, который подклассов JComponent, но не переопределяет ни один из его методов. Позже в подклассе этого класса я вызываю следующий код:

System.out.println(fImage.getHeight() + " " + fImage.getWidth());
propertyFrontLabel = new JLabel(new ImageIcon(fImage));
propertyBackLabel = new JLabel(new ImageIcon(bImage));
propertyFrontLabel.setSize(fImage.getWidth(), fImage.getHeight());
Dimension d = propertyFrontLabel.getSize();
this.setPreferredSize(d);
this.setSize(d);
System.out.println(d.getSize());
System.out.println(this.getSize());
add(propertyFrontLabel);

Эти строки печати распечатывают следующее:
479 296
java.awt.Dimension [ширина = 296, высота = 479]
java.awt.Dimension [ширина = 0, высота = 0]

Я понятия не имею, что происходит. Почему размер этого по-прежнему 0,0?

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Возможно, вы используете пустой макет, или вы вызываете 'getSize ()' для своего компонента перед его рендерингом или перед вызовом 'pack ()' в окружающем окне верхнего уровня, или вы не переопределяя метод компонента getPreferredSize() JComponent ... здесь есть много возможностей, и чтобы получить лучшую помощь, вам нужно сообщить нам lot более подробную информацию об этом классе, вашем GUI и вашем проблема.

2 голосов
/ 13 марта 2012

Это нужно делать, когда в иерархии классов вызываются конструкторы, методы и т. Д. это связано с тем, где именно вы найдете этот код.

По сути, метод или конструктор, который вы ожидали вызвать, вероятно, не достигли ожидаемого уровня. Поместите system.out во все методы (или используйте ваш отладчик), чтобы увидеть, какой код вызывается в каком порядке. Я могу гарантировать вам код, который вы ожидаете вызвать до того, как этот код не будет вызван, он будет вызван после. И это будет связано с тем, как код вызывается в вашей иерархии классов.

...