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

nim*_*cap 20 swing resize jframe dynamic-resizing

我创建了一个JPanel显示图像的自定义(让我们调用它MyPanel),我已经将它添加到了JFramecontentPane中.

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

看起来我需要打电话frame.pack()来做这件事.调用pack()MyPanel增加耦合,所以我不希望这样做.

为了解决这个问题,我扩展了JFrame(让我们调用它MyFrame)并创建了MyFrame观察者,并且MyPanel可以观察到.每当图像MyPanel显示更改时,它就会通知侦听器MyFrame.然后在收到通知时MyFrame调用pack().

是否有JFrame根据其内容调整大小的平滑方式?

Joe*_*nza 10

你描述的解决方案看似合理.

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