Java 允许线集颜色最初相同

Java 允许线集颜色最初相同,java,colors,processing,Java,Colors,Processing,我有一个程序,除了一个问题之外,它能完成我想做的所有事情,而且它真的很小。当颜色的行集和框最初出现时,它们在初始化时都是白色的。然而,当你通过点击一个框来改变每一种颜色时,它们都会变成不同的颜色。要使它们全部变为同一颜色,必须循环一次。我希望所有的颜色框从一开始都是相同的颜色,而不必循环,但我不知道为什么我的设置方式不允许这样。如果您有任何建议,我将不胜感激 final int arraySize = 4; int counter; Button[] b = new Button[arrayS

我有一个程序,除了一个问题之外,它能完成我想做的所有事情,而且它真的很小。当颜色的行集和框最初出现时,它们在初始化时都是白色的。然而,当你通过点击一个框来改变每一种颜色时,它们都会变成不同的颜色。要使它们全部变为同一颜色,必须循环一次。我希望所有的颜色框从一开始都是相同的颜色,而不必循环,但我不知道为什么我的设置方式不允许这样。如果您有任何建议,我将不胜感激

final int arraySize = 4;
int counter;

Button[] b = new Button[arraySize];
int[] flag = new int[]{1, 1, 1, 1};
boolean[] show = new boolean[arraySize];
char[] keys = new char[]{'1', '2', '3', '4'};
color[] cols = new color[] {#F6546A, #FFC390, #FFF68F, #D3FFCE, #C6E2FF, #D2B4FF, #FFFFFF, };
color[] c = new color[]{#FFFFFF, #FFFFFF, #FFFFFF, #FFFFFF};

void setup() {
  size(800, 700);
  counter = 0;

  for (int i = 0; i < arraySize; i++) {
    b[i] = new Button(20, 160+(40*i), 20, 20);
  }
}

void draw(){
  background(0);
  for (int i = 0; i < arraySize; i++) {
    if (show[i]) {
      b[i].draw_button(c[i]);
    }
  }
}

void keyPressed() {
  for (int i = 0; i < arraySize; i++) {
    if (key == keys[i] && flag[i] == 1) {
      show[i] = true;
      flag[i] = flag[i]*-1;
    } else if (key == keys[i] && flag[i] == -1) {
      show[i] = false;
      flag[i] = flag[i]*-1;
    }
  }
}

void mouseClicked() {
  for (int i = 0; i < arraySize; i++) {
    if (b[i].mouse_is_over() == true ) {
      c[i] = cols[counter];
      counter++;
    }
    if (counter == cols.length) {
      counter = 0;
    }
  }
}

class Button{
  float x, y, w, h;

  Button(float xpos, float ypos, float width_, float height_){
    x = xpos; y = ypos;
    w = width_; h = height_;
  }

  void draw_button(color c){
    fill(c);
    stroke(255);
    rect(x, y, w, h);
  }

  boolean mouse_is_over(){
    return (mouseX > x && mouseX < (x+w) && mouseY > y && mouseY < (y+h));
  }
}
final int arraySize=4;
整数计数器;
按钮[]b=新按钮[阵列化];
int[]标志=新的int[]{1,1,1,1};
布尔[]显示=新布尔[arraySize];
char[]keys=新的char[]{'1','2','3','4'};
color[]cols=新颜色[]{F6546A、#FFC390、#FFF68F、#D3FFCE、#C6E2FF、#D2B4FF、#FFFFFF、};
颜色[]c=新颜色[]{#FFFFFF,#FFFFFF,#FFFFFF,#FFFFFF,#ffffffff};
无效设置(){
大小(800700);
计数器=0;
for(int i=0;ix&&mouseX<(x+w)&&mouseY>y&&mouseY<(y+h));
}
}

现在,您的
计数器
变量在
按钮
实例之外。因此,如果单击第一个按钮,您的
计数器
变量将上升到
1
,您可以使用它来设置第一个按钮的颜色。然后,当您单击第二个按钮时,您的
计数器
变量将上升到
2
,并使用该变量设置第二个按钮的颜色。单击其他按钮时也会发生同样的情况:单击一个按钮会影响所有其他按钮的下一种颜色

如果希望每个按钮都有自己的颜色序列,则希望每个
按钮
实例都有自己的
计数器
。换句话说,您希望将
计数器
变量移动到
按钮
类中

然后,无论何时使用
计数器
变量,都必须使用特定
按钮
实例的
计数器
变量


当您执行此操作时,您可能希望在
按钮
类中移动一些其他变量。
c
数组可以是
Button
类中的一个变量,用于跟踪
按钮
实例的当前颜色,也可以去掉它,因为您仍然可以使用
计数器
变量。类似地,
标志
数组可以是
按钮
类中的
布尔变量。

现在,您的
计数器
变量在
按钮
实例之外。因此,如果单击第一个按钮,您的
计数器
变量将上升到
1
,您可以使用它来设置第一个按钮的颜色。然后,当您单击第二个按钮时,您的
计数器
变量将上升到
2
,并使用该变量设置第二个按钮的颜色。单击其他按钮时也会发生同样的情况:单击一个按钮会影响所有其他按钮的下一种颜色

如果希望每个按钮都有自己的颜色序列,则希望每个
按钮
实例都有自己的
计数器
。换句话说,您希望将
计数器
变量移动到
按钮
类中

然后,无论何时使用
计数器
变量,都必须使用特定
按钮
实例的
计数器
变量

当您执行此操作时,您可能希望在
按钮
类中移动一些其他变量。
c
数组可以是
Button
类中的一个变量,用于跟踪
按钮
实例的当前颜色,也可以去掉它,因为您仍然可以使用
计数器
变量。类似地,
标志
数组可以是
按钮
类中的
布尔变量。

@Kevin Workman

我意识到我其实不需要通过计数器,只是像你说的那样在课堂上内化它

final int arraySize = 4;

Button[] b = new Button[arraySize];
int[] flag = new int[]{1, 1, 1, 1};
boolean[] show = new boolean[arraySize];
char[] keys = new char[]{'1', '2', '3', '4'};


void setup() {
  size(800, 700);

  for (int i = 0; i < arraySize; i++) {
    b[i] = new Button(20, 160+(40*i), 20, 20);
  }
}

void draw(){
  background(0);
  for (int i = 0; i < arraySize; i++) {
    if (show[i]) {
      b[i].draw_button();
    }
  }
}

void keyPressed() {
  for (int i = 0; i < arraySize; i++) {
    if (key == keys[i] && flag[i] == 1) {
      show[i] = true;
      flag[i] = flag[i]*-1;
    } else if (key == keys[i] && flag[i] == -1) {
      show[i] = false;
      flag[i] = flag[i]*-1;
    }
  }
}

void mouseClicked() {
  for (int i = 0; i < arraySize; i++) {
      b[i].mouse_is_over();
  }
}

class Button{
  color[] cols = new color[] {#FFFFFF, #F6546A, #FFC390, #FFF68F, #D3FFCE, #C6E2FF, #D2B4FF,};
  float x, y, w, h;
  int counter;

  Button(float xpos, float ypos, float width_, float height_){
    x = xpos; y = ypos;
    w = width_; h = height_;
    counter = 0;
  }

  void draw_button(){
    fill(cols[counter]);
    stroke(255);
    rect(x, y, w, h);
  }

  void mouse_is_over(){
    if(mouseX > x && mouseX < (x+w) && mouseY > y && mouseY < (y+h)){
      counter++;
      counter = counter%cols.length;
    }
  }
}
final int arraySize=4;
按钮[]b=新按钮[阵列化];
int[]标志=新的int[]{1,1,1,1};
布尔[]显示=新布尔[arraySize];
char[]keys=新的char[]{'1','2','3','4'};
无效设置(){
大小(800700);
for(int i=0;i