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