为什么有些点消失(标签和图像)

时间:2017-02-24 23:49:20

标签: java swing

JLabel labels[][] = new JLabel[10][10]; //create a 10*10 matrix  
GameModel game=new GameModel(10); //10 is size

   //this nested for is to check if numbers exist in matrix
   for(int j =  0; j < game.getSize(); j++){
       for (int i =0; i < game.getSize(); i++){
           System.out.println(game.getDot()[j][i]);
       }
   }

它打印正确,

005
011
023
035
040
052
063
072
084
092
105
113
121
133
143
152
163
174
185
193........., a total of 100 numbers(three numbers represent x-axis,y-axis,color respectively)

  //this nested for is to create labels and add picture to lables
 for(int j =  0; j < game.getSize(); j++){//getSize,which is 10
       for (int i =  0; i < game.getSize(); i++)
       {
             labels[j][i] = new JLabel();
             P1.add(labels[j][i]); //JPanel p1;

// getcolor(int x-axis,int y-axis)returns the color  of a given dot,
//which is the last number.for example,the color of "011" is 1, the color of "035" is 5       
             if(game.getColor(j,i)==0)//compare the last number
                 labels[j][i].setIcon(new ImageIcon("ball0.png"));
             else if(game.getColor(j,i)==1)
                 labels[j][i].setIcon(new ImageIcon("ball1.png"));
             else if(game.getColor(j,i)==2)
                 labels[j][i].setIcon(new ImageIcon("ball2.png"));
             else if(game.getColor(j,i)==3)
                 labels[j][i].setIcon(new ImageIcon("ball3.png"));
             else if(game.getColor(j,i)==4)
                 labels[j][i].setIcon(new ImageIcon("ball4.png"));
             else if(game.getColor(j,i)==5)
                 labels[j][i].setIcon(new ImageIcon("ball5.png"));
       }
   }
   f.add(P1);//JFrame f = new JFrame("hello");

但是当我运行它时,它没有给我正确的结果,一些点消失了:

https://i.stack.imgur.com/0bieJ.png

1 个答案:

答案 0 :(得分:1)

没有真正回答你的问题(因为我们没有足够的信息来解决你的问题),但这里有一些调试/编码提示:

  1. 检查数字是否存在的循环无法证明。该循环使用getDot(...)方法。构建标签的代码使用getColor(...)方法。 getColor(...)方法可能无法达到您的预期效果。

  2. 不要创建100个图标。图标可以由标签共享,因此您只需创建6个图标。然后可以简化循环中用于创建图标的逻辑。

  3. 变量名称不应以大写字母开头。

  4. 所以你的代码看起来像这样:

    Icon[] icons = new Icon[6];
    icons[0] = new ImageIcon("ball0.png");
    icons[1] = new ImageIcon("ball1.png");
    ...
    
    for(int j =  0; j < game.getSize(); j++)
    {
        for (int i = 0; i < game.getSize(); i++)
        {
            // add your debug code here
    
            int dot = game.getDot(...);
            int color = game.getColor(...);
            System.out.println(dot + " : " + color);
    
            JLabel label = new JLabel();
            label.setIcon( icons[color] );
    
            labels[j][i] = label;
            p1.add(label);
        }
    }
    

    现在,您的调试代码会告诉您在实际创建标签时是否获得了正确的值,如果颜色索引不符合您的预期,您将收到错误。