我正在使用NetBeans开发一个简单的图像浏览器。我有一个ImageBrowser
类,它扩展了JFrame
(通过右键单击NetBeans项目创建它,然后是New - > JFrame Form),里面是JPanel
和JToolbar
将JButtons
生成为用户选择的目录中的图像缩略图。
单击图像缩略图会在此主JPanel
上显示整个图像。基本上图像的大小不同,我希望JFrame
(即整个窗口)自动调整到图像的大小。
每次JPanel内容发生变化时(例如,当用户点击缩略图并触发ActionEvent时),我都尝试调用.pack()
作为主`JFrame',但它给了我这个错误:
非静态方法pack()无法从静态内容中引用
所以我宁愿坚持这一点,我想知道是否有办法做到这一点。如果有,是否也可以在JFrame窗口大小上设置最大限制?
至于布局,JFrame
是一个免费的布局,使用NetBeans GUI开发人员构建。
答案 0 :(得分:0)
非静态方法pack()无法从静态内容中引用
不要在您的应用程序中使用静态方法。没有必要这样做。假设您遵循Swing tutorial examples中的示例代码,唯一的静态方法应该是main()方法和“createAndShowGUI”方法。
您可以使用
找到要打包的窗口()SwingUtilities.windowForComponent(...);
您从ActionEvent获取源代码,然后使用该组件查找要打包的窗口。
是否也可以在JFrame窗口大小上设置最大限制?
做包()。然后,如果尺寸超出限制,您可以通过在窗口上调用setSize()来覆盖最大尺寸。
我也同意,每次更改图像时,不断改变窗口的大小并不是一个好的设计。
我会将图像添加到JLabel并将标签添加到滚动窗格,当图像大于框架的大小时,该标签会出现。