Java (Swing): поиск размера * экрана * компонента при изменении размера окна - PullRequest
8 голосов
/ 18 мая 2010

Мне нужно найти точный размер экрана компонента в пикселях при изменении размера основного 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

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

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

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

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

Ответы [ 3 ]

9 голосов
/ 18 мая 2010
1 голос
/ 18 мая 2010

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

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

0 голосов
/ 18 мая 2010

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

...