我想从多按钮更改第二行的文本颜色。我正在使用新的GUI构建器,并且已通过编程方式创建了多按钮。
我已经尝试了其他解决方案,例如获取文本,然后尝试更改颜色。但是我无法将String转换为Multibutton,因此无法更改文本的颜色
Bestellungen bestellungen = new Bestellungen();
bestellungen.getOrders();
//Show orders in app
Container conOrders = new Container(BoxLayout.y());
conOrders.setUIID("conOrders");
conOrders.setScrollableY(true);
//Get elements from array
for (int i = 0; i < bestellungen.getOrdersArr().size(); i++) {
String order = bestellungen.getOrdersArr().get(i);
String status = bestellungen.getOrdersStatusArr().get(i);
MultiButton mb = new MultiButton(order);
//TODO: CHANGE THE COLORS of line2
switch (status) {
case "completed":
//Change the second line to color green
mb.setTextLine2(status);
break;
case "processing":
//Change the second line to color yellow
mb.setTextLine2(status);
break;
case "cancelled":
//Change the second line to color red
mb.setTextLine2(status);
break;
default:
mb.setTextLine2(status);
break;
}
conOrders.add(mb);
}
如果状态字符串为“已完成”,则TextLine2文本应为绿色,依此类推...任何帮助将不胜感激。
答案 0 :(得分:1)
简单的解决方法是setUIIDLine2
,然后在主题中定义UIID以具有所需的颜色。
但是,如果您想直接控制标签颜色,则可以修改容器层次结构。请注意,这有点骇人听闻,并且可能会在以后的Codename One更新中更改。
它依赖于这样一个事实,MultiButton
是带有子控件的容器组件,因此,
可以通过向下浏览层次结构来访问第二行(这是一个标签)。
只有一个小困难,就是层次结构取决于 取向。因此,必须区分这两种情况:
// Vertical orientation
//
// MultiButton
// |
// |-- Container
// | |
// | |-- Container
// | | |
// | | |-- Label (name=Line2) <--- this one!
// | | |-- Label (name=Line3)
// | | |-- Label (name=Line4)
// | |
// | |-- Label (name=Line1)
// |
// |-- Container
// | |
// | |-- Label (name=icon)
// |
// |-- Container
// |
// |-- Button (name=emblem)
//
// ------------------------------------------------------------
//
// Horizontal orientation
//
// MultiButton
// |
// |-- Container
// | |
// | |-- Container
// | | |
// | | |-- Label (name=Line3)
// | | |-- Label (name=Line4)
// | |
// | |-- Label (name=Line1)
// | |
// | |-- Container
// | | |
// | | |-- Label (name=Line2) <--- this one!
// | |
// |-- Container
// | |
// | |-- Label (name=icon)
// |
// |-- Container
// |
// |-- Button (name=emblem)
//
private void setLine2Color(MultiButton multiButton, int color) {
List<Component> childsLevel1 = multiButton.getChildrenAsList(false);
Container firstContainerLevel1 = (Container)childsLevel1.get(0);
List<Component> childsLevel2 = firstContainerLevel1.getChildrenAsList(false);
Container targetContainerLevel2 = (Container)childsLevel2.get(multiButton.isHorizontalLayout() ? 2 : 0);
List<Component> childsLevel3 = targetContainerLevel2.getChildrenAsList(false);
Label firstLabelLevel3 = (Label)childsLevel3.get(0);
firstLabelLevel3.getAllStyles().setFgColor(color);
}
我已经尝试了几种情况,但似乎可行:
因此,以下应为您工作:
MultiButton mb = new MultiButton(order);
switch (status) {
case "completed":
//Change the second line to color green
setLine2Color(mb, 0x00ff00);
mb.setTextLine2(status);
break;
case "processing":
//Change the second line to color yellow
setLine2Color(mb, 0xffff00);
mb.setTextLine2(status);
break;
case "cancelled":
//Change the second line to color red
setLine2Color(mb, 0xff0000);
mb.setTextLine2(status);
break;
default:
mb.setTextLine2(status);
break;
}