2014-08-24 3 views
-2

Когда я пытаюсь получить за границы JPanel она всегда возвращает ( я использую this.getBounds() в конструктор класса JPanel):Почему JCompnent.getBounds() всегда возвращает 0 значений?

java.awt.Rectangle[x=0,y=0,width=0,height=0] 

В какой момент в передаче компонента Swing-это на самом деле получить задавать? Есть ли событие компонента, которое происходит после определения размеров границ?

ответ

-2

Хорошо, спасибо за ответ, но я понял это. В основном мне нужно переопределить метод paint() от JComponent. В этот момент границы прямоугольника правильно создаются. Это действительно было не так сложно.

UPDATE:

на основе http://www.oracle.com/technetwork/java/painting-140037.html, она рекомендует использовать paintComponent() над paint(), даже если API делает это позволить. Это касается только самого компонента, а не всех связанных элементов, таких как границы и т. Д.

+0

Нет, пожалуйста, внимательно прочитайте графические пособия. Там вы увидите, что почти никогда не хотите переопределять краску по нескольким причинам, но главным образом потому, что она связана не только с рисованием компонента, но и с границами компонентов и детьми. Если не сделать правильно, вы можете испортить это. Лучше переопределить paintComponent, как я упоминаю в своем ответе, и вызвать метод super в переопределении. Ссылка приходит к вам через минуту. –

+0

Хорошо, сделаю, спасибо! – cj5

+0

Ссылки: 1) [Учебное пособие по базовой Swing Graphics] (http://docs.oracle.com/javase/tutorial/uiswing/painting/index.html). 2) [Более продвинутый учебник] (http://www.oracle.com/technetwork/java/painting-140037.html). –

1

В конструкторе GUI компоненты еще не визуализированы, поэтому их границы будут [0, 0]. Компоненты получаются только после вызова pack() или setVisible(true) в окне верхнего уровня , например, содержащем JFrame. Но ваш вопрос задает вопрос, зачем вам нужна эта информация здесь? Что вы планируете делать с этими данными? Существуют и другие места, где информация может быть получена и может быть полезна, например, метод paintComponent JComponent или компонент ComponentListener.

+3

+1. Мало того, что они еще не были сделаны, но они, вероятно, даже не были добавлены в их контейнер. Таким образом, получение их границ не имеет смысла в этот момент. –

+0

@JBNizet: thanks –

+0

Это была большая проблема, с которой я сталкиваюсь с каким-то другим классом, поскольку мне нужно передать на него объект прямоугольника компонентов родителя. Это больше, чем мне действительно нужно заняться в этот момент и не имеет отношения к моему вопросу. – cj5

Смежные вопросы