我有一个摆动组件,其中组件的理想大小将根据当前正在显示的内容(在这种情况下发生在图像)而有所不同。
我希望在更改内容时更改此首选大小,并允许更改布局(例如,如果在 JScrollPane 内使用组件,则滚动范围将更改以适应组件的大小) .
在 Swing 中执行此操作的规范方法是什么?
我有一个摆动组件,其中组件的理想大小将根据当前正在显示的内容(在这种情况下发生在图像)而有所不同。
我希望在更改内容时更改此首选大小,并允许更改布局(例如,如果在 JScrollPane 内使用组件,则滚动范围将更改以适应组件的大小) .
在 Swing 中执行此操作的规范方法是什么?
建议:
getPreferredSize()
方法覆盖,您可以在其中返回带有所需参数的 Dimension。getPreferredSize 示例:
public Dimension getPreferredSize() {
if (myBuffImg != null) {
return new Dimension(myBuffImg.getWidth(), myBuffImg.getHeight());
}
// default return value
return super.getPreferredSize();
}
编辑
关于您的评论:
但是,您将如何处理组件的内容图像发生变化的情况?是否只是在周围容器中触发重新布局的情况?
你当然会给这个类一个setImage(Image image)
方法,你可以repaint()
在这个方法中使用这个面板。我想这个方法可以调用revalidate()
这个 JPanel 的祖先,导致这个组件被重新布局,但是我对这个类中的方法对其祖先有副作用并不太疯狂,并且认为代码调用可能会更好setImage(...)
建议容器重新验证自身的方法。
很多都取决于您的个人需求。在处理“图像窗格”时,我通常会在图像更改时调用setPreferredSize
and 。invalidate
repaint
更改布局应该会自动触发无效的重新打印请求。
但我同意气垫船,你会想从你自己的海关面板中做到这一点。
另一种方法是使用类似CardLayout
处理不同内容布局输出之间的变化,而不是清理单个面板并重新添加comports
我还要看看Scrollable