ComboBox

Estou precisando fazer um ComboBox igual do <select></select> do HTML que exibe para o Usuário um valor mas por traz daquele valor existe um Código.

Ex:

HTML
<select>
<option value=“valor_que_quero_pegar”>Texto para Usuário</option>
</select>

Preciso pegar o valor que vai por traz do texto de exibição…

Qualquer dica ta valendo…

Valeu abraços!!!

Crie um objeto que tenha a propriedade para mostrar e a propriedade que “voce que pegar”. Ao invez de adicionar um texto à combo, adicione uma nova instancia deste objeto.

Na busca do forum:

http://www.guj.com.br/posts/list/18769.java

Vale uma lida…

Fred, vou salvar o seu dia.

A dica do Lucas Teixeira é válida, mas existe uma maneira melhor. Usando Model e Renderer.

Imagine que você tenha um objeto ou uma lista deles:

[code]public class MeuObjeto {
private Integer id;
private String nome;

public MeuObjeto() {
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

}[/code]

E você quer mostrar o “nome” do objeto e quando selecionar, saber qual o “id” selecionado. Para isso, a melhor coisa é usar models, seja para o combobox, list, tree ou table.

Olha esse exemplo de tela:

[code]import java.util.Vector;
import java.awt.event.;
import javax.swing.
;

public class TelaSimples extends JFrame implements ActionListener {
private JComboBox combo;

public TelaSimples() {
    super("Tela Simples");
    JPanel pan = new JPanel();
    combo = new JComboBox();
    pan.add( combo );
    combo.addActionListener( this );
    getContentPane().add( pan );
    pack();
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    carregarDados();
}

public void carregarDados() {
    Vector v = new Vector();
    MeuObjeto obj = new MeuObjeto();
    obj.setId(new Integer(1));
    obj.setNome("Daniel");
    v.add( obj );
    obj = new MeuObjeto();
    obj.setId(new Integer(2));
    obj.setNome("Fred");
    v.add( obj );
    obj = new MeuObjeto();
    obj.setId(new Integer(3));
    obj.setNome("Flávio");
    v.add( obj );
    //use o renderer que criou para mostrar os dado corretamente
    MeuComboBoxRenderer renderer = new MeuComboBoxRenderer();
    combo.setRenderer( renderer );
    //você pode usar o model padrão do combobox
    DefaultComboBoxModel model = new DefaultComboBoxModel( v );
    combo.setModel( model );
}

public void actionPerformed(ActionEvent arg0) {
    MeuObjeto obj = (MeuObjeto) combo.getSelectedItem();
    System.out.println( obj.getId() + " - " + obj.getNome() );
}

public static void main(String[] args) {
    new TelaSimples().show();
}

}[/code]

Eu tenho uma tela simples, com um combobox. Carrego um Vector com objetos do tipo MeuObjeto, que é o cara que eu quero mostrar e obter informações sobre. Para exibir na tela, de acordo com o que eu quero, eu crio um renderer, como abaixo:

[code]import java.awt.Component;

import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

public class MeuComboBoxRenderer extends JLabel implements ListCellRenderer {
public MeuComboBoxRenderer() {
setOpaque(true);
}

public Component getListCellRendererComponent( JList list, Object value,
        int index, boolean isSelected, boolean cellHasFocus) {
    if (isSelected) {
        setBackground(list.getSelectionBackground());
        setForeground(list.getSelectionForeground());
    } else {
        setBackground(list.getBackground());
        setForeground(list.getForeground());
    }

    //aqui você define o que exibir no combo 
    MeuObjeto obj = (MeuObjeto) value;
    this.setText( obj.getNome() );
    
    return this;
}

}[/code]

E para atualizar o combo (ou a lista), adicionar, remover, alterar ou recuperar os dados, eu uso um model. No caso eu preferí usar um model que já existe na API do Java. A classe javax.swing.DefaultComboBoxModel, que você passa pra ele um Vector com os dados.

E para pega o “id” selecionado? Olha o método actionPerformed().

É complicado, mas depois que você faz o primeiro, você entende fácil.

Valeu Galera, isso vai me ajudar bastante :lol:

Poxa, muito obrigado. Eu estava pesquisando sobre como resolver algo parecido.

Voccê resolveu meu problema também.

Abraços.