Java (Swing): нахождение компонента *экранирует* размер, когда окно изменено

Я должен найти точный размер экрана компонента в пикселях, когда основной JFrame изменен.

Я попробовал несколько вещей и не мог найти простой способ сделать это: это, вероятно, пропустило что-то очевидное.

BBBBB JFRAME BORDER BBB
BZZZZZZZZZZZZZZZZZZZZZB
BAAAAAAAAAAAAAAAAAAAAAB
BCC1................DDB
BCCC................DDB
BCCC................DDB
BCCC................DDB
BCCC................2DB
BEEEEEEEEEEEEEEEEEEEEEB
BBBBBBBBBBBBBBBBBBBBBBB

Измененный, это могло стать этим, если бы, скажем, пользователь сделал основной JFrame короче (вертикально) и шире (горизонтально):

 BBBBBB JFRAME BORDER BBBBBB
 BZZZZZZZZZZZZZZZZZZZZZZZZZB
 BAAAAAAAAAAAAAAAAAAAAAAAAAB
 BCC1....................DDB
 BCCC....................2DB
 BEEEEEEEEEEEEEEEEEEEEEEEEEB
 BBBBBBBBBBBBBBBBBBBBBBBBBBB

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

Я добавляю a ComponentListener получить события изменения размеров, который хорошо работает.

Проблема, которую я имею, - то, что вызов getWidth ()/getHeight () на Компоненте, по-видимому, не возвращает размер экрана компонента, но фактический размер компонента (и у Вас может быть, например, JPanel шире, чем компонент, который это в).

Любая приветствующаяся подсказка.

8
задан SyntaxT3rr0r 18 May 2010 в 18:57
поделиться

3 ответа

Вы ищете JComponent.getVisibleRect().

9
ответ дан 5 December 2019 в 17:35
поделиться

getWidth () и getHeight () возвращает ширину и высоту компонента. Я никогда не слышал о разнице между «фактической» шириной / высотой и «шириной / высотой экрана».

Однако некоторые менеджеры компоновки не заполняют панель содержащимся в ней компонентом, и некоторое пространство между компонентом и краем панели может не быть занято компонентом. В этом случае я обычно setBackground (Color.BLUE) на нижней панели, чтобы увидеть, что происходит.

1
ответ дан 5 December 2019 в 17:35
поделиться

Это очень дрянной способ, но вы можете использовать панель-оболочку, куда вы помещаете свою основную панель. Затем вы можете вызвать getWidth () и getHeight () из панели оболочки.

0
ответ дан 5 December 2019 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: