首页 > 解决方案 > 每次单击按钮时如何创建一个新对象(矩形)?

问题描述

我想创建一个形状对象(在我的情况下,对象是一个矩形)。每次我点击一个按钮。目前,我只能让它出现一次。这个想法是每次我单击按钮时,都会创建一个新的矩形对象,除了旧的对象。因此,如果我点击按钮 5 次,我应该有 5 个矩形。

我试图用 来做到这一点ArrayList,但仍然只出现了一个矩形。有人知道怎么做吗!

非常感谢您!

这是主类,仅供参考还有一个矩形类(未附加)

    import controlP5.*;
    ControlP5 cp5;
    
    Rectangle rect; // rect begins as null
    Button rc;
    
    ArrayList<Rectangle> rectList;
    
    void setup(){
    
    size(1000, 1000);
    rectList = new ArrayList<Rectangle>();
     
    cp5 = new ControlP5(this);
    
    rc = cp5.addButton("Rectangle").
             setPosition(5, 4).
             setColorBackground(color(52, 55, 76));
             
    rc.onRelease(new CallbackListener() {    
        public void controlEvent(CallbackEvent theEvent) {
          // only create the rectangle when the button is clicked
          rect = new Rectangle(100, 100, 100, 100);
        }
    });
    
    }
    
    void draw(){
    background(255);
    
    // if the rect exists, draw it on the screen
      if(rect != null) {
         rect.displayRect();
         showRect();
      } 
      
      for(int i = 0; i < rectList.size(); i++){
        //((Rectangle)rectList.get(i)).update();
        ((Rectangle)rectList.get(i)).displayRect();
      }  
    }
    
    public void showRect(){
      for(Rectangle r: rectList){
      r.displayRect();
      rect(r.getXvalue(), r.getYvalue(), r.getWvalue(), r.getHvalue());
    }
    
    }

标签: javaooparraylistprocessing

解决方案


您有一个列表,但您从未向该列表添加任何内容。该列表仍然为空。

删除成员字段rect,删除此行:

Rectangle rect; // rect begins as null

当您实例化一个 newRectangle时,立即将其添加到列表中。

rc.onRelease( new CallbackListener() {
    
    public void controlEvent(CallbackEvent theEvent) {
      // When the button is clicked, instantiate a new rectangle and remember it by adding to our list of rectangles. 
      rectList.add(
          new Rectangle( 100, 100, 100, 100 )
      );
    }
});

一些指责:这对 Stack Overflow 来说不是一个好问题。通过使用调试器单步调试代码,您可以很容易地发现这个错误。您会看到列表仍然是空的。在发布之前,请自己进行详尽的调试。


推荐阅读