Java(Swing):在调整窗口大小时查找组件的* screen *大小

时间:2010-05-18 18:57:18

标签: java swing resize

我需要在调整主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以获取调整大小事件,这样可以正常工作。

我遇到的问题是在Component上调用getWidth()/ getHeight()显然返回组件的屏幕大小但是组件的实际大小(例如,你可以拥有) ,JPanel比它所用的组件更广泛。)

任何暗示都是最受欢迎的。

3 个答案:

答案 0 :(得分:9)

您正在寻找JComponent.getVisibleRect()

答案 1 :(得分:1)

getWidth()getHeight()返回组件的宽度和高度。我从未听说过“实际”宽度/高度和“屏幕”宽度/高度之间的任何差异。

但是,某些布局管理器不会在面板中填充其包含的组件,并且组件和面板边缘之间的某些空间可能不会被组件占用。在这种情况下,我通常会在底层面板上setBackground(Color.BLUE)看看发生了什么。

答案 2 :(得分:0)

这是一种非常垃圾的方式,但您可以使用包装面板,将主面板放入其中。您可以从包装器面板中调用getWidth()getHeight()