You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现每次点击按钮时新增一个独立的矩形对象?

问题根源

你当前的代码有两个核心错误导致无法生成多个矩形:

  • 按钮点击回调中仅创建了矩形对象赋值给全局rect变量,没有将新创建的矩形添加到存储用的rectList数组中,每次点击都会覆盖之前的rect值,自然只有最新的一个生效
  • draw方法里的绘制逻辑冗余重复,rect全局变量完全没有保留的必要,所有矩形都应该统一存到rectList中统一绘制

修正后的代码

import controlP5.*;
ControlP5 cp5;
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) {
        // 每次点击创建新矩形,直接加入ArrayList
        Rectangle newRect = new Rectangle(100, 100, 100, 100);
        rectList.add(newRect);
      }
  });
}

void draw(){
  background(255);
  // 统一遍历List绘制所有矩形,不需要额外判断单独的rect变量
  for(Rectangle r : rectList){
    r.displayRect();
    // 如果你Rectangle类的displayRect已经实现了绘制逻辑,可以删掉下面这行原生rect调用
    rect(r.getXvalue(), r.getYvalue(), r.getWvalue(), r.getHvalue());
  }
}

补充说明

  • 如果希望每次生成的矩形位置不重叠,可以在创建Rectangle的时候把坐标参数改成随机值,比如new Rectangle(random(0, width-100), random(0, height-100), 100, 100)
  • 原来的showRect方法冗余重复,已经整合到draw的遍历逻辑中,不需要额外保留

内容的提问来源于stack exchange,提问作者bana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 07:36:04