覆盖JPanel的getPreferredSize()和来自外部的setPreferredSize()之间的区别

时间:2013-12-26 19:00:30

标签: java swing jpanel

假设我有一个继承自JPanel的类,名为SomePanel。此类会覆盖paintComponent()并在其中引入Rectangle。 此类的实例将添加到JFrame

getPreferredSize(Dimension)内覆盖SomePanel和在JFrame中调用instanceOfSomePanel.setPreferredSize(Dimension)之间有什么区别? 两者都有同样的效果,不是吗?

1 个答案:

答案 0 :(得分:1)

创建自定义组件的原因是对Rectangle进行自定义绘制。要绘制的Rectangle的大小将成为组件的属性。因此,组件还应负责确定组件的正确大小,该大小将基于要绘制的矩形的大小。因此,您可以覆盖getPreferredSize()方法以确保组件正确绘制。

例如,如果您在上一个问题中绘制一个像Rectangle一样的Rectangle:

Rectangle rect = new Rectangle(50,50,50,50);

然后首选大小应该是(150,150),以便Rectangle在整个组件周围具有相同大小的边框。

如果您使用组件将其留给程序员,他们可能会执行以下操作:

somePanel.setPreferredSize( new Dimension(50, 50) );

现在组件无法正确绘制,因为程序员只使用了随机大小。