我创建了如下课程。当我创建此类的名为drawpanel的对象并使用frame.getContentPane().add(BorderLayout.CENTER,drawpanel)添加到框架时,我得到了一个具有预期黑色背景的矩形。这是否意味着Panel的this.getWidth和this.getHeight默认与Frame的高度和宽度相同(这就是为什么它用黑色填充整个框架)?
我想重新构建我的问题的另一种方式是 - 如果我通过扩展 JPanel 创建一个自定义小部件,并且当实例化此自定义小部件时,其默认高度和宽度是多少?
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class MyDrawPanel extends JPanel {
public void paintComponent(Graphics g){
g.fillRect(0, 0, this.getWidth(), this.getHeight());
}
}
这是否意味着Panel的this.getWidth和this.getHeight默认与Frame的高度和宽度相同(这就是为什么它用黑色填充整个框架)?
不,这意味着框架有一个布局/约束(
BorderLayout
/CENTER
),它将把组件拉伸到填充它的任何大小。
如果我通过扩展 JPanel 创建一个自定义小部件,当实例化这个自定义小部件时,它的默认高度和宽度是多少?
0x0(未布置任何组件)。
完成自定义绘画的面板应返回内容的首选尺寸。 添加到框架后,调用
pack()
方法,它将达到所需的确切大小,以符合组件的首选大小。
我认为 JPanel 本身的首选大小为 0,0。但如果你向其中添加一些具有更高首选尺寸的组件,它的首选尺寸将不会是 0。
JPanel
的默认尺寸为 0 宽度和 0 高度。
您可以设置尺寸:
panel.setSize()
、panel.setPreferredSize()
panel.pack()
当您处理遵循首选大小属性的 GridBagLayout 时,这一点非常重要:
new JPanel().getPreferredSize() == java.awt.Dimension[width=10,height=10]