Java JFrame和JPanel的背景颜色不同

Java JFrame和JPanel的背景颜色不同,java,swing,Java,Swing,我想在JFrame上画一个JPanel。JFrame的背景颜色与JPanel不同。到目前为止,这是我的代码: import java.awt.Color; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JPanel; public class DifferentColor extends JFrame{ JPanel p; GradientColor(){ this.setD

我想在JFrame上画一个JPanel。JFrame的背景颜色与JPanel不同。到目前为止,这是我的代码:

 import java.awt.Color;
 import java.awt.Dimension;
 import javax.swing.JFrame;
 import javax.swing.JPanel;

public class DifferentColor extends JFrame{

JPanel p;

GradientColor(){
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setPreferredSize(new Dimension(500, 500));
    this.getContentPane().setBackground(Color.yellow);        
    p = new JPanel();
    p.setPreferredSize(new Dimension(400, 400));
    p.setBackground(Color.red);
    this.add(p);
    this.pack();
    this.setVisible(true);
  }

  public static void main(String[] args) {
    // TODO code application logic here
      new DifferentColor ();
  }
}

运行代码时,颜色为红色。黄色(JFrame)上不是红色(JPanel)。如何解决它?

您的问题是
JPanel
的大小与您的
JFrame
相同。阿文德解释了原因

下面的代码片段将
JPanel
分配到
North
区域,并在其周围添加一个厚厚的蓝色边框进行演示

public void showFrame() {
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setPreferredSize(new Dimension(500, 500));
    this.getContentPane().setBackground(Color.yellow);
    JPanel p = new JPanel();
    p.setPreferredSize(new Dimension(400, 400));
    p.setBackground(Color.red);
    Border border = BorderFactory.createLineBorder(Color.blue, 10);
    border.isBorderOpaque();
    p.setBorder(border);
    this.add(p, BorderLayout.NORTH);
    this.pack();
    this.setVisible(true);
}

public static void main(String[] args) {
    new DifferentColor().showFrame();
}

另外,请查看。

您的代码是否编译过,类名
differentitcolor
和构造函数名
GradientColor
不匹配
JFrame
使用
BorderLayout
,然后
JPanel
this.add(p);
)覆盖整个
getContentPane()
,您可以对JFrame使用GridBagLayout或BoxLayout,然后
getContentPane()
的一部分应该在屏幕上可见