Java getContentPane().setBackground()不';好像不行

Java getContentPane().setBackground()不';好像不行,java,colors,background,jframe,Java,Colors,Background,Jframe,我试图使一个简单的窗口出现红色背景,但它不工作。出于某种原因,我一直使用灰色背景,而我的代码是: import java.util.*; import java.awt.*; import javax.swing.*; class Courses extends JFrame { private Image dbImage; private Graphics dbg; Courses(){ setTitle("Course Schedule");

我试图使一个简单的窗口出现红色背景,但它不工作。出于某种原因,我一直使用灰色背景,而我的代码是:

import java.util.*;
import java.awt.*;
import javax.swing.*;

class Courses extends JFrame {

    private Image dbImage;
    private Graphics dbg;

    Courses(){
        setTitle("Course Schedule");
        setLayout(new FlowLayout());
        getContentPane().setBackground(Color.red);
        setSize(600,600);
        setLocation(300,10);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public void paint(Graphics g){
        dbImage = createImage(getWidth(), getHeight());
        dbg = dbImage.getGraphics();
        paintComponent(dbg);
        g.drawImage(dbImage, 0, 0, this);
    }

    public void paintComponent(Graphics g){
        g.setColor(Color.white);
        g.fillOval(100,100,100,100);
        repaint();      
    }
}

public class canvas
{
    public static void main(String[] args){
        Courses C = new Courses();
    }
}
如您所见,我使用Jframe扩展了该类,并使用了getContentPane().setBackground()方法,因此这应该会绘制一个具有红色背景(和白色椭圆形)的窗口,但我得到的是灰色背景(和白色椭圆形)。有人能看出哪里出了问题吗


此外,我第一次尝试使用缓冲区绘制,我不确定现在是否顺利,但这并不重要。

在Java中,调用“重新绘制”会擦除屏幕上所有绘制的元素(Swing组件除外)这意味着调用getContentPane().setBackground(Color.RED)只在重新绘制框架(您可以立即重新绘制)之前可见。为了防止出现这种情况,最好在绘制方法开始时调用
super.paint(g)
,因为这样可以使JFrame在绘制之前呈现类似背景色的视觉效果


您还可以考虑使用<代码> SETCORE(颜色:红色)后面跟着代码> CurrReCt(x,y,宽度,高度)< /C> >以更改背景颜色。但是,这可能效率较低。

谢谢,我没有意识到我尝试创建缓冲区会导致问题。问题不在于缓冲区,而在于Java渲染系统由于某种原因在重新绘制时不会自动渲染背景。不过,确实没有理由使用缓冲区。你的JFrame已经做到了!