controlP5 ListBox选择活动颜色处理

时间:2013-11-23 11:37:26

标签: processing control-p5

我想要一个选定的ListBox项目以红色显示并保持这种状态,直到我做出另一个选择。我怎样才能做到这一点?当我点击并按住鼠标键时它保持红色,然后在我放开后恢复到原始背景颜色。这是方法.setColorActive()?的功能,还是应该永久更改为我点击后指定的颜色?我的代码如下。感谢。

list = controlp5.addListBox("LIST")
      .setPosition(130, 40)
      .setSize(100, 150)
      .setItemHeight(20)
      .setBarHeight(20)
      .setColorBackground(color(40, 128))
      .setColorActive(color(255, 0, 0))

1 个答案:

答案 0 :(得分:2)

据我所知,从源代码中可以看出,没有任何值可以跟踪控制器是否被选中。但是,您可以使用controlEvent侦听器手动保持跟踪,并手动更改背景颜色作为快速和hacky解决方法:

import controlP5.*;

ControlP5 controlp5;
ListBox list;
int selectedIndex = -1;//no selection initially
int colourBG = 0xffff0000;
int colourSelected = 0xffff9900;

void setup(){
  size(400,400);
  controlp5 = new ControlP5(this);
  list = controlp5.addListBox("LIST")
      .setPosition(130, 40)
      .setSize(100, 150)
      .setItemHeight(20)
      .setBarHeight(20)
      .setColorBackground(colourBG)
      .setColorActive(colourSelected);

   for (int i=0;i<80;i++) {
    ListBoxItem lbi = list.addItem("item "+i, i);
    lbi.setColorBackground(colourBG);
  }
}
void draw(){
  background(255);
}
void controlEvent(ControlEvent e) {
  if(e.name().equals("LIST")){
    int currentIndex = (int)e.group().value();
    println("currentIndex:  "+currentIndex);
    if(selectedIndex >= 0){//if something was previously selected
      ListBoxItem previousItem = list.getItem(selectedIndex);//get the item
      previousItem.setColorBackground(colourBG);//and restore the original bg colours
    }
    selectedIndex = currentIndex;//update the selected index
    list.getItem(selectedIndex).setColorBackground(colourSelected);//and set the bg colour to be the active/'selected one'...until a new selection is made and resets this, like above

  }

}

因此,在上面的示例中,selectedIndex将上一个/最近的选择存储为列表索引。然后在controlEvent处理程序中使用它。如果先前有选择,请恢复正常的背景颜色。然后继续将所选索引设置为最近选择并将背景颜色设置为活动颜色,以便在视觉上看起来选中。

这是一种手动/ hacky方法。更长的版本将涉及扩展ListBox java类并添加此功能,或编辑controlP5源代码,重新编译库和使用自定义版本。