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.