我想用Painter创建一组按钮。我写了下一个代码
class ListButton extends Button{
int id;
ListButton(int id, final Image unsel, final Image sel, final Image pres) {
this.id = id;
getUnselectedStyle().setBgTransparency(255);
getSelectedStyle().setBgTransparency(255);
getPressedStyle().setBgTransparency(255);
getUnselectedStyle().setAlignment(Component.LEFT);
getSelectedStyle().setAlignment(Component.LEFT);
getPressedStyle().setAlignment(Component.LEFT);
getUnselectedStyle().setBgPainter(new Painter(){
public void paint(Graphics graphics, Rectangle rectangle) {
graphics.drawImage(buttonBgImage, 0, 0);
int w= rectangle.getSize().getWidth();
int h= rectangle.getSize().getHeight();
graphics.drawImage(unsel, w- unsel.getWidth()-10, (h- unsel.getHeight())/2+ 3);
}
});
getSelectedStyle().setBgPainter(new Painter(){
public void paint(Graphics graphics, Rectangle rectangle) {
graphics.drawImage(buttonBgImage, 0, 0);
int w= rectangle.getSize().getWidth();
int h= rectangle.getSize().getHeight();
graphics.drawImage(sel, w- sel.getWidth()-10, (h- sel.getHeight())/2+ 3);
}
});
getPressedStyle().setBgPainter(new Painter(){
public void paint(Graphics graphics, Rectangle rectangle) {
graphics.drawImage(buttonBgImage, 0, 0);
int w= rectangle.getSize().getWidth();
int h= rectangle.getSize().getHeight();
graphics.drawImage(pres, w- pres.getWidth()-10, (h- pres.getHeight())/2+ 3);
}
});
}
}
如果我在表单中插入2个按钮,则只显示第一个按钮。第二个按钮没有背景图像(buttonBgImage),没有图标(sel,unsel或pres)。我随机发现,如果第二个按钮插入某个Container,它将会被绘制。有什么奇怪的行为?抱歉我的英文。
答案 0 :(得分:1)
List对渲染器/画家进行了特定的优化,打破了这一点。我们通常建议人们坚持使用样式和UIID操作,并避免使用画家来完成这些任务。
E.g。在Codename One / LWUIT中,我们甚至在GUI构建器中为列表渲染器中的细条纹UI提供了特定支持。
如果您坚持这种方法,请尝试使用list.setMutableRendererBackgrounds(true);禁用此优化。