2016-07-06 80 views
0

我试图做交替颜色的靶心,但每次运行这段代码时,我都会得到一种统一的颜色。我尝试在for循环结束时使用repaint(),但它没有帮助。交替颜色的靶心

import java.awt.Color; 
import java.awt.Graphics; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Unit5Activity1 extends JPanel{ 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     Color color1 = new Color(100, 199, 100); 
     Color color2 = new Color(208, 180, 45); 

     for(int i = 5; i > 0; i--){ 
      if(i == 1 || i == 3 || i == 5) { 
       g.setColor(color1); 
       g.fillOval(250 + i*25, 250 + i*25, 250 - 50*i, 250 - 50*i); 
      } 

      else if(i == 2 || i == 4){ 
       g.setColor(color2); 
       g.fillOval(250 + i*25, 250 + i*25, 250 - 50*i, 250 - 50*i); 
      } 
     } 
    } 





    public static void main(String[] args){ 
     Unit5Activity1 panel = new Unit5Activity1(); 
     JFrame application = new JFrame(); 

     application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     application.add(panel); 
     application.setSize(500, 500); 
     application.setVisible(true); 
    }//main 

}//class 

回答

3
g.fillOval(250 + i*25, 250 + i*25, 250 - 50*i, 250 - 50*i); 

不要做数学计算的方法的参数。当你这样做时,你无法验证计算是否正确。

取而代之的是创建变量并在计算中使用变量,然后您可以调试代码以查看它是否以您期望的方式工作。

所以,你的代码应该是这样的:

for(int i = 5; i > 0; i--) 
{ 
    int x = 250 + i*25; 
    int y = x; 
    int width = 250 - 50*i; 
    int height = width; 
    System.out.println(x + " : " + width); 

    if(i == 1 || i == 3 || i == 5) 
    { 
     g.setColor(color1); 
    } 

    else if(i == 2 || i == 4) 
    { 
     g.setColor(color2); 
    } 

    g.fillOval(x, y, width, height); 
} 

你想先画的最大圆。因此,通过每次循环:

  1. 的x/y值应增加和
  2. 宽度/高度应适当减少

现在你可以验证你的逻辑正确与否。