getContentPane()。setBackground()似乎不起作用

时间:2014-11-07 21:24:24

标签: 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");
        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(),所以这应该绘制一个红色背景(和一个白色椭圆)的窗口,但我得到一个灰色背景(用白色椭圆形)。有人能看出出了什么问题吗?

我也是第一次尝试使用缓冲画,我不确定它现在是否顺利,但这并不重要。

1 个答案:

答案 0 :(得分:0)

在Java中,调用repaint会擦除屏幕上的所有绘制元素(Swing Components除外)。 这意味着调用getContentPane()。setBackground(Color.RED)只有在重新绘制帧时才能看到(你马上就做了)。为了防止这种情况,最好调用{{1在paint方法的开头,因为这允许JFrame在绘制之前呈现像背景颜色这样的视觉效果。

您还可以考虑使用super.paint(g)后跟setColor(Color.RED)来更改背景颜色。但是,这可能效率较低。