2016-07-06 4 views
0

Im пытается сделать bullseye с чередующимися цветами, но каждый раз, когда я запускаю этот код, я получаю один однородный цвет. Я попытался использовать repaint() в конце цикла for, но это не помогло.Bullseye С чередующимися цветами

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. х/у значения должны возрастать и
  2. ширина/высота должна уменьшаться

Теперь вы можете проверить, ваша логика является правильным или нет.

Смежные вопросы