Estou tentando fazer um combobox que receba um valor e retorne outro como o id do BD, entao sequi um exemplo que encontrei aqui no fórum e deu certo. Primeiro criei um renderer para receber um objeto do tipo Estado e depois um modelo onde eu pudesse enviar um objeto Estado através do método setSelectedItem e este encontraria esse objeto através do id. O problema é que quando eu seleciono atraves do modelo ele funciona mas quando eu tendo retornar ao objeto selecionado anteriormente través do mouse no combobox, ele simplesmente não seleciona. Não entendi qual é o problema se alguem poder me ajudar.
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.ListCellRenderer;
import javax.swing.JList;
import javax.swing.BorderFactory;
import java.awt.Color;
import java.awt.Component;
public class ComboRenderer extends JLabel implements ListCellRenderer {
public ComboRenderer() {
setOpaque(true);
}
public Component getListCellRendererComponent(JList list,Object value,
int index,boolean isSelected,boolean cellHasFocus){
if(value.getClass()==Estado.class)
setText(((Estado)value).getSigla());
setBackground(isSelected ? Color.red : Color.white);
setForeground(isSelected ? Color.white : Color.black);
return this;
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import java.util.Iterator;
public class ComboModel extends AbstractListModel implements ComboBoxModel{
private Vector<Object> lista;
public int indexSelected;
public ComboModel(Vector<Object> lista){
this.lista = lista;
}
public void addElement(Object anObject){
lista.add(anObject);
}
public Object getElementAt(int index) {
return lista.get(index);
}
public int getIndexOf(Object anObject){
int index = 0;
for(int i=0;i<=lista.size()-1;i++){
if(((Estado)lista.get(i)).getId() == ((Estado)anObject).getId()){
index = i;
break;
}
}
return index;
}
public void setSelectedItem(Object anObject){
for(int i=0;i<=lista.size()-1;i++){
if(((Estado)lista.get(i)).getId() == ((Estado)anObject).getId()){
indexSelected = i;
break;
}
}
}
public Object getSelectedItem() {
return lista.get(indexSelected);
}
public int getSize() {
return lista.size();
}
public void insertElementAt(Object anObject, int index){
lista.add(index,anObject);
}
public void removeAllElements(){
lista.removeAllElements();
}
public void removeElement(Object anObject){
for(int i=0;i<=lista.size()-1;i++){
if(((Estado)lista.get(i)).getId() == ((Estado)anObject).getId()){
lista.remove(i);
break;
}
}
}
public void removeElementAt(int index){
lista.remove(index);
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
public class Teste extends JFrame implements ActionListener{
private JComboBox combo;
private JTextField campo;
private ComboModel model;
public Teste(){
setTitle("Teste de combo");
setSize(300,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
Container c = getContentPane();
c.setLayout(new FlowLayout());
Vector<Object> v = new Vector<Object>();
v.add(new Estado(1,"AP","Amapa"));
v.add(new Estado(2,"AC","Acre"));
v.add(new Estado(3,"PA","Para"));
model = new ComboModel(v);
combo = new JComboBox();
combo.setRenderer(new ComboRenderer());
combo.setModel(model);
combo.addActionListener(this);
campo = new JTextField(5);
campo.addActionListener(this);
c.add(combo);
c.add(campo);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==combo){
System.out.println(((Estado)model.getSelectedItem()).getId());
}
if(e.getSource()==campo){
Estado est1 = new Estado();
est1.setId(Integer.parseInt(e.getActionCommand()));
model.setSelectedItem(est1);
combo.repaint();
}
}
public static void main(String args[]){
new Teste().setVisible(true);
}
}