我创建了一个显示图片的自定义JPanel
(让我们称之为MyPanel
),我已将其添加到JFrame
的contentPane。
我想在图像更改时自动调整JFrame
的大小以适应MyPanel
。
看起来我需要致电frame.pack()
来执行此操作。从pack()
调用MyPanel
会增加耦合,所以我不想这样做。
为了解决这个问题,我延长了JFrame
(让我们称之为MyFrame
)并使MyFrame
观察者和MyPanel
可观察。只要图像MyPanel
显示更改,它就会通知侦听器MyFrame
此实例。然后MyFrame
在收到通知时调用pack()
。
是否有更顺畅的方式根据其内容调整JFrame
的大小?
答案 0 :(得分:10)
您描述的解决方案似乎很合理。
或者,每当MyPanel更改其图像时,它都可以找到其父帧,然后在其上调用pack()。如果不存在这样的框架,则不要做任何事情。不需要创建额外的类,它就像你将要获得的松散耦合一样。您可以使用SwingUtilities.getAncestorOfClass()轻松完成此操作。