更改Swing组件的首选大小



我有一个swing组件,其中组件的理想大小将根据当前显示的内容而变化(在本例中为图像)。

我希望在内容更改时更改此首选大小,并允许更改布局(例如,如果在JScrollPane中使用组件,则滚动范围将更改以适应组件的大小)。

在Swing中实现这一点的规范方法是什么?

建议:

  • 使用一个类扩展JPanel(或JComponent)
  • 给它一个getPreferredSize()方法重写,在该方法中返回一个具有所需参数的Dimension
  • 例如,如果直径将基于BufferedImage,则可以有以下内容:

getPreferredSize示例:

public Dimension getPreferredSize() {
if (myBuffImg != null) {
return new Dimension(myBuffImg.getWidth(), myBuffImg.getHeight());
} 
// default return value
return super.getPreferredSize();      
}

编辑
关于您的评论:

您将如何处理组件内容图像发生更改的情况?这只是触发在周围容器中重新布局的一种情况吗?

当然,你应该给这个类一个setImage(Image image)方法,你可以从这个方法中repaint()这个面板。我认为方法可以在这个JPanel的祖先上调用revalidate(),从而导致这个组件被重新部署,但我并不太喜欢这个类中的方法对其祖先有副作用,我认为调用setImage(...)方法的代码建议容器重新验证自己可能会更好。

很多都将取决于您的个人需求。当处理"图像窗格"时,当图像发生变化时,我通常会调用setPreferredSizeinvalidaterepaint

更改布局应该会自动触发无效的重新打印请求。

但我同意Hovercraft的观点,你会想从你自己的海关小组来做这件事。

另一种方法是使用类似CardLayout的东西来处理不同内容布局之间的变化,而不是清理单个面板并向其重新添加组件

我还想看看可滚动

相关内容

  • 没有找到相关文章

最新更新