在Java中,默认的JPanel高度和宽度是多少?

在Java中,默认的JPanel高度和宽度是多少?,java,swing,awt,Java,Swing,Awt,我已经创建了如下的类。当我创建这个类的一个名为drawpanel的对象并使用frame.getContentPane().add(BorderLayout.CENTER,drawpanel)添加到框架中时,我得到了一个黑色背景的矩形。这是否意味着面板的this.getWidth和this.getHeight默认具有与框架相同的高度和宽度(这就是为什么它用黑色填充整个框架的原因) 我想重新定义我的问题的另一种方式是——如果我通过扩展JPanel创建一个自定义小部件,当这个自定义小部件被实例化时,它

我已经创建了如下的类。当我创建这个类的一个名为drawpanel的对象并使用frame.getContentPane().add(BorderLayout.CENTER,drawpanel)添加到框架中时,我得到了一个黑色背景的矩形。这是否意味着面板的this.getWidth和this.getHeight默认具有与框架相同的高度和宽度(这就是为什么它用黑色填充整个框架的原因)

我想重新定义我的问题的另一种方式是——如果我通过扩展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());
    }
}

我认为JPanel本身的首选大小为0,0。但如果向其中添加具有更高首选大小的组件,其首选大小将不会为0

这是否意味着面板的this.getWidth和this.getHeight默认具有与框架相同的高度和宽度(这就是为什么它用黑色填充整个框架的原因)

不,这意味着框架具有布局/约束(
BorderLayout
/
CENTER
),该布局/约束将拉伸零部件,使其达到填充它的任何尺寸

如果我通过扩展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());
    }
}
0x0(未布置任何组件)



完成自定义绘制的面板应返回内容的首选大小。添加到框架后,调用
pack()
方法,它将是满足组件首选尺寸所需的准确尺寸。

JPanel
具有默认尺寸0宽度和0高度。

您可以设置大小:

  • 手动:
    panel.setSize()
    panel.setPreferredSize()
  • 自动:
    panel.pack()

如果是这样,我代码中的fillRect调用将转换为g.fillRect(0,0,0,0),并且帧中不会填充黑色!不,它只是在组件外部绘制,也就是说,它不绘制。但是如果你调整JPanel的大小,它就会变得可见,因为它会被重新绘制。而且,实际的大小不是首选的大小!如果JPanel是JFrame中唯一的组件,那么它的大小与JFrame的大小相同。谢谢-我知道了-如果JPanel是JFrame中唯一的组件,那么它的大小与JFrame的大小相同-这就是我一直在寻找的答案!谢谢。谢谢你给我带来的声誉@Abhishekpalakkalliyath:)首选大小,正如它的名字所说,只是一个首选大小:)谢谢-从你的评论中,我可以理解,中心约束将JPanel拉伸到框架内可以填充的任何大小,这样当调用this.getWidth、this.getHeight时,它返回JPanel(在帧内)占用的任意宽度和高度-正确吗?“当调用this.getWidth,this.getHeight时,它返回JPanel(在帧内)占用的任意宽度和高度”是。如果在帧底部有一个按钮,将JPanel对准中心将意味着黑色将仅填充在框架的剩余部分(减去按钮)-或者整个框架填充黑色,但由于按钮位于底部,黑色不可见(换句话说,黑色是否也填充在按钮背面)?.
JPanel
中没有
pack()
方法。