微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何单独更改每个 controlP5 下拉列表条目的颜色?

如何解决如何单独更改每个 controlP5 下拉列表条目的颜色?

使用以下 MWE:

import controlP5.*;
import java.util.*;


ControlP5 cp5;

void setup() {
  size(400,400);
  cp5 = new ControlP5(this);
  List l = Arrays.asList("a","b","c","d","e","f","g","h");
  /* add a ScrollableList,by default it behaves like a DropdownList */
  cp5.addScrollableList("dropdown")
     .setPosition(100,100)
     .setSize(200,100)
     .setBarHeight(20)
     .setItemHeight(20)
     .addItems(l)
     // .setType(ScrollableList.LIST) // currently supported DROPDOWN and LIST
     ;
     
     
}

void draw() {
  background(240);
}

如何分别更改每个列表条目的字体颜色?我假设我必须使用类似于以下内容的 for 循环

    for (int i =0; i < myarray.length; i++){
      dropdown.setColorActive(elementDetermine(myarray[i]));
    }

其中 elementDetermine() 接受一个整数并返回一个颜色。不幸的是,当我在 setup 或 draw 函数中运行此循环时,下拉列表不会在没有错误消息的情况下更改。

解决方法

遗憾的是,没有简单的现成方法可以单独更改每个列表条目的字体颜色。

正如您在 documentation 中看到的,可用方法访问适用于所有项目的主标题。

事实上,相同的 Label 组件会在所有列表项中重复使用,并且每个项目只需重新渲染一次(更改当前文本/颜色),如您在 source code 中看到的那样

>

如果您真的需要更改字体颜色,您可以这样做,但这将需要跳过很多 OOP 箍(因为每个项目没有 Label 实例的数组):

  • 您需要创建一个自定义 ControllerView< ScrollableList > 来覆盖它的 display() 方法
  • 要使自定义 display() 与原始 ScrollableList 工作相同,您几乎需要复制超类
  • ScrollableList 超类有一堆可以从 ScrollableListView 类轻松访问的私有属性,因为它是 ScrollableList 的一部分,但是在我们的例子中,所有这些 {{1} } / private 需要在 protected 中访问的属性需要可以访问。为此,实现了一个 display() 子类 (ScrollableList),它主要在 PopUpScrollableList 中使用 private/protected 属性的任何地方复制它的超类行为,并且还使它们可用。

最后,自定义可滚动列表可以有一个 display(),它可以存储自定义颜色,以便可以在重写的 color[] 方法中访问和呈现它们:

display()

controlp5 scrollable list custom font color per item

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。