1

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 つのボタンを挿入すると、最初のボタンのみが表示されます。2 番目のボタンには、背景画像 (buttonBgImage) とアイコン (sel、unsel、または pre) がありません。コンテナに挿入すると、2番目のボタンがペイントされることがランダムにわかりました。奇妙な行動は何ですか?私の英語でごめんなさい。

4

1 に答える 1

1

リストには、これを破るレンダラー/ペインターの特定の最適化があります。通常、スタイルとUIIDの操作に固執し、このようなタスクにペインターを使用しないことをお勧めします。

たとえば、Codename One / LWUITでは、リストレンダラーのピンストライプUIをGUIビルダーで特別にサポートしています。

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

于 2012-04-15T16:16:34.613 に答える