setbackground不在Jframe的构造函数中工作

时间:2013-09-15 15:18:00

标签: java swing jframe

我正在玩JFrames,但是当我尝试设置JFrame的背景颜色时,它无法正常工作。据我所知,你需要在JFrame的contentpane上设置背景颜色。在那种情况下,我不明白为什么这不起作用。

class drawCircles extends JFrame{
int [][] s;
Container c;
public drawCircles(int [][]circleArray){
    super();
    setSize(400, 400);
    getContentPane().setBackground(Color.YELLOW);

    s=circleArray;
    show();
}

编辑:是的,我确实覆盖了paint()

public void paint (Graphics g){
    int width=this.getHeight()/10;
    int start=width;
    int endY=this.getHeight()-width;
    int endX=this.getWidth()-width;

    for(int i=0; i<s.length; i++){
        g.drawLine(i*width, start, i*width, endY);
        //g.drawLine(start, i*width, endX, i*width);

    }
    //g.drawRect(start, start, width*s.length,width*s.length);

    for(int i=0; i<s.length; i++){
        for(int j=0; j<s.length; j++){
            switch(s[i][j]){
            case 0: g.setColor(new Color(252, 177, 177));break;
            case 1: g.setColor(new Color(250, 165, 165));break;
            case 2: g.setColor(new Color(242, 156, 156));break;
            case 3: g.setColor(new Color(224, 133, 133));break;
            case 4: g.setColor(new Color(208, 117, 117));break;
            case 5: g.setColor(new Color(199, 107, 107));break;
            case 6: g.setColor(new Color(191, 98, 98));break;
            case 7: g.setColor(new Color(181, 88, 88));break;
            case 8: g.setColor(new Color(171, 79, 79));break;
            case 9: g.setColor(new Color(161, 71, 71));break;
            default:g.setColor(Color.white);

            }
            g.fillOval(j*width, i*width, width, width);
        }
    }

2 个答案:

答案 0 :(得分:3)

不要覆盖JFrame的paint方法。期。这就是为什么你当前的代码没有工作,因为你不允许JFrame的超级对象做必要的绘画。

虽然添加超级方法可能会解决您的问题:

public void paint (Graphics g) {
  super.paint(g);
  //... your code

你仍然不应该这样做,因为绘画除了绘制包括绘制子对象和边框的组件之外还要承担更多的东西。

最好覆盖JPanel的paintComponent,并确保在覆盖中调用super.paintComponent(...)方法。更重要的是 - 阅读Java Swing图形教程。

答案 1 :(得分:3)

  • 自定义绘图在paint()中完成,适用于Swing JComponents paintComponent()而不是public drawCircles(int [][]circleArray){

  • 不要直接绘制到Top-Level Containers,通过覆盖JPanel放置paintComponent()getPreferredSize(otherwise is there zero dimension)

  • 基础非常好,在Oracle教程2D Graphics

  • 中有所描述