据我从源代码中可以看出,没有任何价值来跟踪是否选择了控制器。但是,您可以使用 controlEvent 侦听器手动跟踪并手动更改背景颜色,这是一种快速而简单的解决方法:
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 源代码、重新编译库并使用自定义版本。