controlP5:用于多个RadioButton结果的矩阵/2D阵列



我试图查询用户从4组或多组单选按钮中进行选择,其中每组有5个按钮(处理2+)。我遇到的问题是,从每组按钮中选择创建的数组,并将其填充到矩阵中的列中,在矩阵中可以查询元素,2D数组可以打印并最终写入csv或tab txt文件。

import controlP5.*;
ControlP5 controlP5;
RadioButton c0;
RadioButton c1;
RadioButton c2;
RadioButton c3;
int cols = 5;
int rows = 4;
int[][] myArray = new int[cols][rows];
void setup() {
  size(600,650);
controlP5 = new ControlP5(this);
  c0 = controlP5.addRadioButton("ch0",60,60)
               .setSize(20,20)
               .setItemsPerRow(5)
               .setSpacingColumn(50)               
               .addItem("c03", 1)
               .addItem("c04", 2)
               .addItem("c05", 3)
               .addItem("c0AM", 4)
               .addItem("c0AF", 5)
               ;
  c1 = controlP5.addRadioButton("ch1",60,80)
               .setSize(20,20)
               .setItemsPerRow(5)
               .setSpacingColumn(50)
               .addItem("c13", 1)
               .addItem("c14", 2)
               .addItem("c15", 3)
               .addItem("c1AM", 4)
               .addItem("c1AF", 5)
               ;  
  c2 = controlP5.addRadioButton("ch2",60,100)
               .setSize(20,20)
               .setItemsPerRow(5)
               .setSpacingColumn(50)
               .addItem("c23", 1)
               .addItem("c24", 2)
               .addItem("c25", 3)
               .addItem("c2AM", 4)
               .addItem("c2AF", 5)
               ;  
  c3 = controlP5.addRadioButton("ch3",60,120)
               .setSize(20,20)
               .setItemsPerRow(5)
               .setSpacingColumn(50)        
               .addItem("c33", 1)
               .addItem("c34", 2)
               .addItem("c35", 3)
               .addItem("c3AM", 4)
               .addItem("c3AF", 5)
               ;
}
void draw() {
background(0);
}
void controlEvent(ControlEvent theEvent) {
  if(theEvent.isGroup() && theEvent.name().equals("ch0") || theEvent.name().equals("ch0") ||       theEvent.name().equals("ch2") || theEvent.name().equals("ch3")){
   println(theEvent.name());
   println(theEvent.arrayValue());
   //float t=float(theEvent.arrayValue());
   //int[][] = { {float getGroup(),float[] getArrayValue()}, {3,2,1,0}, {3,5,6,1}, {3,8,3,4} };
//int cols = 4;
//int rows = 5;
//int[][] myArray = new int[cols][rows];
// Two nested loops allow us to visit every spot in a 2D array.   
// For every column I, visit every row J.
//for (int i = 0; i < cols; i++) {
// for (int j = 0; j < rows; j++) {
//myArray[i][j] = float(theEvent.arrayValue);
  }
} 

您将不同的东西混合在一起。此外,您不需要检查整个阵列并存储这些信息。只需点击更新按钮。这是您的controlEvent 的新版本

void controlEvent(ControlEvent theEvent) {
  int cols = 4;
  int rows = 5;
  int[][] myArray = new int[cols][rows];      
  switch(theEvent.getId()){
    case 0:
      myArray[0][(int)theEvent.value()-1] = 1;
      break;
    case 1:
      myArray[1][(int)theEvent.value()-1] = 1;
      break;
    case 2:
      myArray[2][(int)theEvent.value()-1] = 1;
      break;
    case 3:
      myArray[3][(int)theEvent.value()-1] = 1;
      break;
  }  
  println("==== " + theEvent.getId() + " ===");
  println(myArray[theEvent.getId()]);
}

要进行这个简单的切换,您需要将ID参数添加到所有单选按钮中,如下所示:

  c3 = controlP5.addRadioButton("ch3", 60, 120)
  .setId(3)
    .setSize(20, 20)
     ...

我不知道你到底想如何使用这个数组,所以我的实现将它用作局部变量,所以每次调用这个事件时都会删除它,但这可以通过将数组声明为全局变量,然后只删除更新的列来避免。

最新更新