假设我有一个继承自JPanel
的类,名为SomePanel
。此类会覆盖paintComponent()
并在其中引入Rectangle
。
此类的实例将添加到JFrame
。
在getPreferredSize(Dimension)
内覆盖SomePanel
和在JFrame中调用instanceOfSomePanel.setPreferredSize(Dimension)
之间有什么区别?
两者都有同样的效果,不是吗?
答案 0 :(得分:1)
创建自定义组件的原因是对Rectangle进行自定义绘制。要绘制的Rectangle的大小将成为组件的属性。因此,组件还应负责确定组件的正确大小,该大小将基于要绘制的矩形的大小。因此,您可以覆盖getPreferredSize()
方法以确保组件正确绘制。
例如,如果您在上一个问题中绘制一个像Rectangle一样的Rectangle:
Rectangle rect = new Rectangle(50,50,50,50);
然后首选大小应该是(150,150),以便Rectangle在整个组件周围具有相同大小的边框。
如果您使用组件将其留给程序员,他们可能会执行以下操作:
somePanel.setPreferredSize( new Dimension(50, 50) );
现在组件无法正确绘制,因为程序员只使用了随机大小。