2012-04-12 4 views
1

ペインタでボタンのセットを作成します。私は最初のボタンがよくあったされてフォームに2つのボタンを挿入した場合、私は次のコード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)です。私はそれがいくつかのコンテナに挿入される場合、2番目のボタンがペイントされることをランダムに発見しました。どのような奇妙な行動ですか?私の英語には申し訳ありません。

答えて

1

リストには、これを破るレンダリング/ペインタのための特定の最適化があります。一般的には、StylesやUIIDの操作をして、これらのような作業のためにペインタを使用しないことをお勧めします。

など。 Codename One/LWUITでは、リストレンダラーのピンストライプUI用のGUIビルダーでも特定のサポートがあります。

このアプローチを主張する場合は、list.setMutableRendererBackgrounds(true)を使用してみてください。この最適化を無効にします。