如何根据内容自动调整JFrame的大小

时间:2009-11-13 16:05:37

标签: swing jframe resize dynamic-resizing

我创建了一个显示图片的自定义JPanel(让我们称之为MyPanel),我已将其添加到JFrame的contentPane。

我想在图像更改时自动调整JFrame的大小以适应MyPanel

看起来我需要致电frame.pack()来执行此操作。从pack()调用MyPanel会增加耦合,所以我不想这样做。

为了解决这个问题,我延长了JFrame(让我们称之为MyFrame)并使MyFrame观察者和MyPanel可观察。只要图像MyPanel显示更改,它就会通知侦听器MyFrame此实例。然后MyFrame在收到通知时调用pack()

是否有更顺畅的方式根据其内容调整JFrame的大小?

1 个答案:

答案 0 :(得分:10)

您描述的解决方案似乎很合理。

或者,每当MyPanel更改其图像时,它都可以找到其父帧,然后在其上调用pack()。如果不存在这样的框架,则不要做任何事情。不需要创建额外的类,它就像你将要获得的松散耦合一样。您可以使用SwingUtilities.getAncestorOfClass()轻松完成此操作。