关于java:根据JPanel图像内容调整JFrame的大小?

Resize JFrame according to JPanel image content?

我正在使用NetBeans开发一个简单的图像浏览器。我有扩展了JFrame的类ImageBrowser(通过右键单击NetBeans项目,然后单击新建-> JFrame Form创建它),并且在其中是一个JPanel和一个JToolbar,其中JButtons作为图像缩略图从生成用户选择的目录。

单击图像缩略图会在此主JPanel上显示整个图像。基本上,图像的大小不同,我希望JFrame(即整个窗口)自动调整为图像的大小。

我曾经尝试每次JPanel内容更改时(例如,当用户单击缩略图并触发ActionEvent时)为主JFrame调用.pack(),但这给了我这个错误:

non-static method pack() cannot be referenced from static content

因此,我对此颇为困惑,我想知道是否有办法做到这一点。如果存在,是否还可以设置JFrame窗口大小的最大限制?

对于布局,JFrame是使用NetBeans GUI开发人员构造的免费布局。


non-static method pack() cannot be referenced from static content

请勿在您的应用程序中使用静态方法。不需要这样做。假设您遵循在Swing教程示例中找到的示例代码,则唯一的静态方法应该是main()方法和" createAndShowGUI "方法。

您可以使用

找到要打包的窗口()

1
SwingUtilities.windowForComponent(...);

您从ActionEvent获取源,然后使用该组件找到要打包的窗口。

is it also possible to set a maximum limit on the JFrame window size?

执行pack()。然后,如果尺寸超出限制,则始终可以通过在Window上调用setSize()来覆盖最大尺寸。

我也同意,每次更改图像时都不断更改Window的大小并不是一个好的设计。

我将图像添加到JLabel,并将标签添加到滚动窗格,以使当图像大于框架大小时该滚动条可以显示。