我以编程方式制作容器列表。这些容器具有两个单元格的表格布局。在第一个单元格中,我显示一个复选框,在第二个单元格中是一个多按钮:
在某些行中,我想禁用用户点击复选框。我曾尝试在复选框上使用.setHidden(true),setVisible(true)等等,但在这种情况下,复选框不可见(这也是可以接受的),但在这种情况下,它并没有保留它'行中的空格和数据不是垂直对齐的(如图所示)。有谁知道如何实现这个???灰色和禁用复选框会很棒,但不能显示它并保留它的空间是可以接受的。
以下是代码:
Container list = findContainerOrders(f);
list.setScrollableY(true);
LinkedHashMap htJSONObject;
//al is a ArrayList
for(int i=0; i < al.size(); i++){
htJSONObject = (LinkedHashMap)al.get(i);
Container cr = new Container();
TableLayout gr = new TableLayout(1, 2);
gr.setGrowHorizontally(true);
cr.setLayout(gr);
final MultiButton b = new MultiButton();
b.setName((String)htJSONObject.get("text1"));
b.setTextLine1((String)htJSONObject.get("text2"));
b.setTextLine2((String)htJSONObject.get("text3"));
b.setTextLine3((String)htJSONObject.get("text4"));
b.setUIIDLine1("MultiLine1");
b.setUIIDLine2("MultiLine2");
b.setUIIDLine3("MultiLine1Right");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
//some action here
}
});
CheckBox cb = new CheckBox();
cb.setName((String)htJSONObject.get("text1"));
String sSomeCondition = (String)htJSONObject.get("Condition");
//If this condition equals "NO" than I want to disable the checkbox
if (sSomeCondition.equals("NO")) {
// I've tried this but it doesn't work good
//cb.setHidden(true);
//cb.setHidden(true, true);
//cb.setVisible(true);
//cb.setEnabled(false);
//TODO - disable checkbox code....???
}
else {
cr.addComponent(cb);
}
cr.addComponent(b);
list.addComponent(cr);
}
当我使用&#34; setEnabled(false)&#34;就像陈在他的回答中说的那样,复选框被禁用但它的外观是一样的。我的主题中的复选框有禁用样式,我可以更改复选框背景,但我想更改复选框矩形的颜色。
我尝试通过添加常量&#34; checkBoxUncheckDisImage&#34;来做到这一点。在一个主题&#34;常数&#34;选项卡并添加另一个图像来替换复选框矩形图像,但它没有工作。
如何更改已禁用复选框的默认复选框图像?
答案 0 :(得分:2)
setEnabled(false)应该这样做,确保你的主题中的CheckBox有一个禁用的样式