2012-04-12 85 views
1

我想用Painter創建一組按鈕。我寫下代碼如何使用lwuit畫筆

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。什麼奇怪的行爲?對不起我的英語不好。

回答

1

列表對渲染器/畫家進行了特定的優化,可以打破這一點。我們通常建議人們堅持使用樣式和UIID操作,並避免使用畫家來完成這些任務。

E.g.在Codename One/LWUIT中,我們甚至在GUI構建器中爲列表渲染器中的細條紋UI提供了特定的支持。

如果你堅持這種方法嘗試使用list.setMutableRendererBackgrounds(true);禁用此優化。