Se esta querendo aprender ou iniciar novos projetos em Flex, clique aqui

Bha, o que mais enche o saco em qualquer linguagem é definir o valor padrão para um ComboBox.

Então criei um componente que estende o ComboBox. Neste há dois métodos extras que deve ser setado o o Campo e o Valor.

Arquivo main.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
	xmlns:controls="br.mx.controls.*"
    layout="absolute"
    backgroundColor="#f6f6f6"
    backgroundGradientColors="[#f6f6f6, #bbbbbb]"
    creationComplete="init()"
    viewSourceURL="srcview/index.html" >

    <!-- Texto Superior -->
    <mx:Label x="10" y="10" fontSize="20" fontWeight="bold"
              text="Definindo valor padrão para o ComboBox" />
    <!-- Barra Horizontal -->
    <mx:HRule x="10" y="49" width="690" />

    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;

            [Bindable]
            public var code:ArrayCollection = new ArrayCollection(
                [ {label:"PHP", data:"1"},
                  {label:"Java", data:"2"},
                  {label:"Coldfusion", data:"3"} ]);

        	private function init():void
        	{
        		cb1.dataProvider = code;
    			cb1.campoSelecionado = "label";
    			cb1.valorSelecionado = "Coldfusion";

        		cb2.dataProvider = code;
        		cb2.campoSelecionado = "data";
    			cb2.valorSelecionado = 2;

        	}
        ]]>
    </mx:Script>
    <controls:MeuComboBox id="cb1" x="10" y="60" width="150" />
    <controls:MeuComboBox id="cb2" x="10" y="90" width="150" />
</mx:Application>
Arquivo br/mx/controls/MeuComboBox.mxml
package br.mx.controls
{
    import mx.collections.ArrayCollection;
    import mx.controls.Alert;
    import mx.controls.ComboBox;

    public class MeuComboBox extends ComboBox
    {
        private var _campo:String = '';
        private var _valor:String = '';

        public function MeuComboBox()
        {
            super();
        }

        public function set campoSelecionado(campo:String):void
        {
            if(campo.toString().length > 0)
            {
                this._campo = campo;
                this.labelFun();
            }
        }

        public function set valorSelecionado(valor:Object):void
        {
            if(valor.toString().length > 0)
            {
                this._valor = valor.toString();
                this.labelFun();
            }
        }

        private function labelFun():void
        {
            if(this._campo.length > 0 && this._valor.length > 0)
            {
                var data:ArrayCollection = this.dataProvider as ArrayCollection;
                for(var a:int = 0; a< data.length; a++)
                {
                    if(data[a][this._campo].toString() == this._valor.toString())
                    {
                        this.selectedIndex = a;
                    }
                }
            }
        }
    }
}

Veja o exemplo.

Divirtam-se com o Código Fonte.

Gostou? Não esqueça de curtir!

Ou compartilhe o link com seus amigos

4 comentários

Deixe uma resposta

  1. Boa tarde eu sou novo no flex fiz um crusinho muito basico e é o seguinte eu preciso colocar um xml que eu fiz off line e tal e eu preciso colocar esse xml que se trata de varios carros, descricao dos carros e imagem dos carros e preciso que aparecam as imagens com o nome e descreicao embaixo das imagens como eu posso fazer isso teria como vc me pasar o codigo qualquer coisa posso ate mandar o codigo que estou fazendo para ver se vc pode me ajudar obrigado.!

     
  2. 'label' é o valor default para o atributo labelField que é de onde o ComboBox tira o texto a exibir.

    tome por exemplo este código:
        
          
            
            
          
        
        

    veja que o texto para o drop down virá do atributo nome a partir de uma lista xml. O campoSelecionado que vc incluiu no tem componente é exatamente o 'labelField' que já existe.

    julio

     
  3. Ola Julio

    O detalhe é que normalmente não se usa o atributo Label para setar este valor.

    Eu sempre possuo uma lista contendo ID e TITULO, e o título é definido como label e o ID é definido como valor padrão.

     
  4. Eduardo,

    vc não precisa criar um novo atributo campoSelecionado pois o ComboBox já tem o atributo labelField.
    daí em lugar da função set campoSelecionado vc pode simplesmente fazer um override set labelField().

    julio