0

我正在尝试查询用户从 4 组或更多组单选按钮中进行选择,其中每组有 5 个按钮(处理 2+)。我遇到问题的地方是通过从每组按钮中选择创建的数组并让它填充矩阵中的列,其中可以查询元素并且可以打印二维数组并最终写入为 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);
  }
} 
4

1 回答 1

1

你把不同的东西混合在一起。此外,您无需检查整个阵列并存储此信息。只需更新单击的按钮。这是您的新版本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)
     ...

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

于 2014-09-03T09:02:17.467 回答