20

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

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

看来我需要打电话frame.pack()才能做到这一点。pack()从增加耦合调用,MyPanel所以我不想这样做。

为了解决这个问题,我扩展了JFrame(让我们称之为MyFrame)并使观察者成为MyFrame观察者,并且是MyPanel可观察的。每当图像MyPanel显示更改时,它都会通知侦听器,MyFrame例如。然后在收到通知时MyFrame调用。pack()

有没有更流畅的JFrame根据内容调整大小的方法?

4

1 回答 1

11

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

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

于 2009-11-13T17:11:29.693 回答