尝试创建一个对象数组,但它继续使用索引0来存储我的所有对象

时间:2014-02-18 22:25:56

标签: java arrays object processing

我正在尝试创建一个对象数组,更具体地说是按钮或"矩形",但是当我使用for循环初始化元素时,似乎当我将对象分配给索引时它们是全部存储在数组的索引0中。

这是我正在上课的课程:

http://gyazo.com/f012368671d23fc02bca250c3948775b

这是我试图创建一个对象的类:

http://gyazo.com/c91cb0dac82b3c8ca9e0b3a8ab473b8a

Program when it runs

Image of the class I am working from

import  java.util.Arrays;
class ButtonPanel {

  Internet i;
  Button b;
  Button[] buttons;

  ButtonPanel() {
    i = new Internet();
    stroke(28, 215, 234);
    noFill();
    rect(width, 0, -i.getX(), height);
    buttons = new Button[3];
  } 

  void drawButtons() {
    rectMode(CORNER);
    fill(255);
    translate(1040, -105);
   for (int i = 0; i < buttons.length; i++) { 
     buttons[i]= new Button(0, i*90, -width/2, 90);
      // work out proper calculations 
      // work out how to manipulate individual indexes
     buttons[0].addColor(color(0));
    }

    //for (int j = 0; j < switches.length; j++) {
    //switches[0] = new Button(j*-width/6, -90, -width/6, 90);
    //}
    }
  void addPanel() {
    drawButtons();
  }
}

2 个答案:

答案 0 :(得分:0)

是什么让你怀疑一切都存储在索引0上?

此循环应该有效,因为i从0开始并且一直增加到buttons.length(应该是2),并且您将新的按钮分配给buttons[i]。最后,您的循环应该运行两次,将唯一的Button个对象分配给buttons[0]buttons[1]

答案 1 :(得分:0)

我认为你不应该在draw方法中创建按钮,在构造函数中这样做。每件事情应该只做一件事:)

按钮中的相同内容,不要在构造函数中绘制,制作一个display()方法。如果你致电addColor(),它将无效,因为已经绘制了rects。

结构可能看起来像这样:

ButtonPanel bp =new ButtonPanel();

void setup() {
  size(300, 200);
  bp.drawButtons();
}
class ButtonPanel {

  Button[] buttons;

  ButtonPanel() {

    buttons = new Button[3];
    for (int i = 0; i < buttons.length; i++) { 
      buttons[i]= new Button(100+i*35, 100, 30, 30);
    }
  } 

  void drawButtons() {
    stroke(28, 215, 234);
    noFill();
    rect(90, 90, 120, 50);
    for (int i = 0; i < buttons.length; i++) {
      buttons[i].addColor(color(random(255), random(255), random(100)));
      buttons[i].display();
    }
  }
}

class Button {
  int x, y, w, h;
  color c;
  Button(int _x, int _y, int _w, int _h) {
    x = _x;
    y = _y;
    w = _w;
    h = _h;
    c = color(100, 100, 100);
  }

  void display() {
    fill(c);
    stroke(255);
    rect(x, y, w, h);
  }
  void addColor(color newC) {
    c = newC;
  }
}