mik*_*era 2 java layout swing sizing layout-manager
我有一个 swing 组件,其中组件的理想大小将根据当前显示的内容(在本例中为图像)而变化。
我希望在内容更改时更改此首选大小,并且还允许更改布局(例如,如果在 JScrollPane 内使用组件,则滚动范围将更改以适应组件的大小) 。
在 Swing 中执行此操作的规范方法是什么?
建议:
getPreferredSize()方法重写,您可以在其中返回带有所需参数的维度。获取首选尺寸示例:
public Dimension getPreferredSize() {
if (myBuffImg != null) {
return new Dimension(myBuffImg.getWidth(), myBuffImg.getHeight());
}
// default return value
return super.getPreferredSize();
}
Run Code Online (Sandbox Code Playgroud)
编辑
关于您的评论:
如果组件的内容图像发生变化,您将如何处理?这只是触发周围容器重新布局的情况吗?
当然,您会为此类提供一个setImage(Image image)方法,并且您可以repaint()从该方法中创建此面板。我认为该方法可以调用revalidate()此 JPanel 的祖先,从而导致该组件被重新布局,但我不太热衷于此类中的方法对其祖先产生副作用,并且认为对于调用的代码来说可能会更好setImage(...)建议容器重新验证自身的方法。