Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从外部重写JPanel的getPreferredSize()和setPreferredSize()之间的区别_Java_Swing_Jpanel - Fatal编程技术网

Java 从外部重写JPanel的getPreferredSize()和setPreferredSize()之间的区别

Java 从外部重写JPanel的getPreferredSize()和setPreferredSize()之间的区别,java,swing,jpanel,Java,Swing,Jpanel,假设我得到了一个从JPanel继承的类,名为SomePanel。此类重写paintComponent(),并在其中绘制一个矩形。 此类的一个实例被添加到JFrame 在SomePanel内部重写getPreferredSize(Dimension)与从JFrame调用instanceOfSomePanel.setPreferredSize(Dimension)之间有什么区别?。 这两者的作用是一样的,不是吗?创建自定义组件的原因是要对矩形进行自定义绘制。要绘制的矩形的大小将成为组件的属性。因此,

假设我得到了一个从
JPanel
继承的类,名为
SomePanel
。此类重写
paintComponent()
,并在其中绘制一个
矩形。
此类的一个实例被添加到
JFrame

SomePanel
内部重写
getPreferredSize(Dimension)
与从JFrame调用
instanceOfSomePanel.setPreferredSize(Dimension)
之间有什么区别?。
这两者的作用是一样的,不是吗?

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

例如,如果您正在绘制一个与上一个问题中的矩形相似的矩形:

Rectangle rect = new Rectangle(50,50,50,50);
然后,首选的大小可能应该是(150150),以便矩形在整个组件周围具有相同大小的边框

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

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

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

如果您重写
getPreferedSize
您肯定违反了liskov替换原则,人们就会重写它,从而导致布局管理器。阅读更多信息。此外,您可以用您的计算替换组件UI委托的计算。