Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java(Swing):查找组件';调整窗口大小时的s*屏幕*大小_Java_Swing_Resize - Fatal编程技术网

Java(Swing):查找组件';调整窗口大小时的s*屏幕*大小

Java(Swing):查找组件';调整窗口大小时的s*屏幕*大小,java,swing,resize,Java,Swing,Resize,我需要在调整主JFrame的大小时找到组件的确切屏幕大小(以像素为单位) 我试过几种方法,但找不到简单的方法:它可能错过了一些显而易见的东西 BBBBB JFRAME BORDER BBB BZZZZZZZZZZZZZZZZZZZZZB BAAAAAAAAAAAAAAAAAAAAAB BCC1................DDB BCCC................DDB BCCC................DDB BCCC................DDB BCCC.......

我需要在调整主JFrame的大小时找到组件的确切屏幕大小(以像素为单位)

我试过几种方法,但找不到简单的方法:它可能错过了一些显而易见的东西

BBBBB JFRAME BORDER BBB
BZZZZZZZZZZZZZZZZZZZZZB
BAAAAAAAAAAAAAAAAAAAAAB
BCC1................DDB
BCCC................DDB
BCCC................DDB
BCCC................DDB
BCCC................2DB
BEEEEEEEEEEEEEEEEEEEEEB
BBBBBBBBBBBBBBBBBBBBBBB
调整大小后,如果用户将主JFrame缩短(垂直)和加宽(水平),可能会变成这样:

我想要的是在屏幕上找到由点指示的矩形区域的精确大小(以像素为单位)

我正在添加一个
ComponentListener
来获取调整大小的事件,这很好

我遇到的问题是,在组件上调用getWidth()/getHeight()显然不会返回组件的屏幕大小,而是返回组件的实际大小(例如,您可以有一个比它所在的组件更宽的JPanel)

欢迎任何提示。

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


但是,某些布局管理器不会使用其包含的构件填充配电盘,并且该构件与配电盘边缘之间的某些空间可能不会被构件占用。在这种情况下,我通常在底层面板上设置背景(Color.BLUE),以查看发生了什么。

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

您正在寻找的。

@aioobe:您从未见过JPanel因为JFrame比JPanel小而内容被裁剪!?如果这是您看到的行为,那么您的布局管理器似乎已损坏。您使用的是哪种布局管理器?@aioobe:IntelliJ IDEA的GridLayoutManager可能用于IntelliJ IDEA本身。我怀疑它是否坏了,但我会尝试使用BorderLayout来查看。@aioobe:你能解释一下,当你将一个最小宽度为100的组件放在一个50像素宽的JFrame中时会发生什么情况吗。一个未损坏的布局管理器应该在这里做什么呢?以GridLayout为例,它不会考虑最小大小。我认为最小/最大/首选尺寸被视为布局管理器的“提示”。但是找不到它的参考资料。+1用于ASCII艺术图纸。@Finglas:谢谢,我发现它比一些Photobucket图像链接或诸如此类的链接更具“弹性:)非常感谢,我知道我遗漏了一些明显的东西。很好地解决了我的问题,并且与我正在使用的布局管理器配合得很好(等等):)呵呵,我也试过了,但在我的情况下,它不起作用:我仍然会让组件给我一个getWidth()/getHeight(),这不是真正的w/h。然而,Nate的答案是正确的:getVisibleRect()确实返回了真正的VisibleRect:)
 BBBBBB JFRAME BORDER BBBBBB
 BZZZZZZZZZZZZZZZZZZZZZZZZZB
 BAAAAAAAAAAAAAAAAAAAAAAAAAB
 BCC1....................DDB
 BCCC....................2DB
 BEEEEEEEEEEEEEEEEEEEEEEEEEB
 BBBBBBBBBBBBBBBBBBBBBBBBBBB