1

我正在玩 JFrame,但是当我尝试设置 JFrame 的背景颜色时,它不起作用。据我所知,您需要在 JFrame 的内容窗格上设置背景颜色。在那种情况下,我不明白为什么这不起作用。

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);
        }
    }
4

2 回答 2

3

不要覆盖 JFrame 的绘制方法。时期。这就是为什么您当前的代码无法正常工作的原因,因为您不允许 JFrame 的超级对象进行必要的绘制。

虽然添加 super 的方法可能会很好地解决您的问题:

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

您仍然不应该这样做,因为与绘制组件(包括绘制子对象和边框)相比,绘制负责更多的事情。

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

于 2013-09-15T15:23:46.763 回答
3
  • 自定义绘图在paint()Swing JComponents 中完成,paintComponent()而不是public drawCircles(int [][]circleArray){

  • 不要直接绘制到,通过覆盖和Top-Level Containers放在那里JPanelpaintComponent()getPreferredSize(otherwise is there zero dimension)

  • 基本在 Oracle 教程2D Graphics中描述的很好

于 2013-09-15T15:24:15.627 回答