Pergunta

Eu quero colocar várias LabelFields com texto alinhado à direita em um MainScreen com um fundo azul alice. Infelizmente eu não consigo descobrir como fazer isso acontecer.

O melhor que posso fazer é definir a minha backround para Color.ALICEBLUE em um MainScreen e colocar LabelFields na tela (também com um fundo azul alice).

    public void paint(Graphics graphics) {
        graphics.setBackgroundColor(Color.ALICEBLUE);
        graphics.clear();
        super.paint(graphics);  
    }

e ...

    LabelField display = new LabelField("", LabelField.FIELD_RIGHT){
        public void paint(Graphics graphics) {
            graphics.setColor(Color.DIMGRAY);
            graphics.setBackgroundColor(Color.ALICEBLUE);
            graphics.clear();
            super.paint(graphics);  
        }
    };

Substituir a rotina pintura MainScreen me dá o meu fundo azul alice, mas substituindo rotinas pintura dos LabelFields não parece ser adequada. O resultado é uma linha branca, com um fundo azul alice atrás apenas do texto do rótulo. Adicionando USE_ALL_WIDTH corrige o problema de fundo, mas não posso alinhar à direita com USE_ALL_WIDTH.

Alguém sabe uma solução para isso?

Foi útil?

Solução

Em versões <= 4.5 você pode criar VerticalFieldManager com tinta overrided ():

class BGManager extends VerticalFieldManager {
    public BGManager() {
        super(USE_ALL_HEIGHT|USE_ALL_WIDTH);
    }
    public void paint(Graphics graphics)
    {
        graphics.setBackgroundColor(Color.DARKRED);
        graphics.clear();
        super.paint(graphics);
    }
}

Em seguida, usá-lo na tela você está adicionando LabelField simples a ele:

class Scr extends MainScreen {
    BGManager manager = new BGManager();
    public Scr() {
        super();
        add(manager);       
        manager.add(new LabelField("Hello!", FIELD_RIGHT));
        manager.add(new LabelField("This is a test", FIELD_RIGHT));
    }
}

Em versões> = 4,6 você pode usar o método para o gerenciador de tela padrão setBackgroud ():

class Scr extends MainScreen {  
    public Scr() {
        super();
        VerticalFieldManager manager = 
            (VerticalFieldManager)getMainManager();
        manager.setBackground(
            BackgroundFactory.createSolidBackground(
                Color.DARKRED));        
        manager.add(new LabelField("Hello!", FIELD_RIGHT));
        manager.add(new LabelField("This is a test", FIELD_RIGHT));
    }
}

Veja BB KB DB-00131 - Como - Alterar a cor de uma tela de fundo

Outras dicas

Use

new LabelField("",LabelField.USE_ALL_WIDTH | DrawStyle.RIGHT);

sem substituindo o método paint do LabelField.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top