[Resolvido] Atualizar dado selecionado no JCombobox

Boa noite a todos! Galera estou passando um problema aqui com um Jcombobox, já pesquisei e tentei de várias maneiras, mas o negócio não anda.
Se alguém pode mim ajuda agradeço.

Seguinte, tenho uma tela onde tenho um JTable onde carrega dados do banco de dados, onde nessa mesma tela tenho os JtextField, que ao clicar na linha da tabela os dados são carregados para os JTextField, até ai tudo beleza. Só que tenho um combobox que ele não seta com o valor selecionado.

Segue o códigos:

Classe do ModelCombobox

package model.usuario;
  
  
import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.util.ArrayList;  
import java.util.List;

import javax.swing.ComboBoxModel;  
import javax.swing.event.ListDataListener;  

import control.ConnectionFactory;
   
public class BoxModelUserTipo implements ComboBoxModel{ 
	private Connection connection;
	
	
    ArrayList<String> tipo = new ArrayList();  
    
      
    String selected_item = null;  
      
    public BoxModelUserTipo(){
    	this.connection = new ConnectionFactory().getConnection();
        try{  
        	PreparedStatement stmt = connection.prepareStatement("select nome from tipouser"); //Esse select deve trazer apenas uma coluna para facilitar.(coluna q vai no Combobox)  
              
            ResultSet rs = stmt.executeQuery();  
              
            while(rs.next()){  
                tipo.add(rs.getString("nome")); //adiciona no arraylist todos os itens selecionados  
            }  
              
            try{  
                //tenta selecionar o primeiro item do array  
                  
                selected_item = tipo.get(0);  
            }catch(Exception ex){  
                ex.printStackTrace();  
            }  
              
        }catch(Exception e){  
            e.printStackTrace();  
              
            //trate sua exeção  
        }  
    }  
  
    public void setSelectedItem(Object anItem) {  
        selected_item = tipo.get(tipo.indexOf(anItem));  
    }
    
    public void setSelected(Tipo anItem) {  
        selected_item = tipo.get(tipo.indexOf(anItem));  
    }
  
    public Object getSelectedItem() {  
       return selected_item;  
    }  
  
    public int getSize() {  
        return tipo.size();  
    }  
  
    public Object getElementAt(int index) {  
        return tipo.get(index);  
    } 
  
    public void addListDataListener(ListDataListener l) {  
        //TO DO NOTHING  
    }  
  
    public void removeListDataListener(ListDataListener l) {  
        //TO DO NOTHING  
    } 
      
}  

Preenchendo combobox:


private JComboBox jbTipo;

jbTipo = new JComboBox(new BoxModelUserTipo()); //preenche com os dados do banco de uma tabela, tipo como se fosse uma categorias

Segue o trecho do código do evento:


tfNome.setText(usuario.getNome()); //esta ok!
tfUserNome.setText(usuario.getUsuario()); //esta ok!
tfEmail.setText(usuario.getEmail()); //esta ok!

System.out.println(usuario.getTipo()); //teste para saber se esta buscando dados (esta ok!)
jbTipo.setSelectedItem(usuario.getTipo());

Qualquer ajuda é bem vinda!

Tenta usar o método getModel() antes do setSelectedItem().

Comigo sempre funciona, mas ainda não dei uma olhada pra saber porquê.

[quote=fasts]Tenta usar o método getModel() antes do setSelectedItem().

Comigo sempre funciona, mas ainda não dei uma olhada pra saber porquê.[/quote]

Obrigado pela resposta!
Rapaz não deu certo.

Fiz dessa maneira:

jbTipo.getModel();
jbTipo.setSelectedItem(usuario.getTipo());

alguém ?

:cry:

Tem algumas coisas estranhas no seu código.

O método setSelected recebe um objeto da classe Tipo, e você chama indexOf. Porém, sua lista é de Strings e não de Tipos.
O setSelectedItem está recebendo um Object. Tem certeza que esse object também é do tipo String?

O ideal mesmo seria ter um List<Tipo> na sua combo e não um List<String>.

Não assim, cara…
Faz assim:

jbTipo.getModel().setSelectedItem(usuario.getTipo());

[quote=fasts]Não assim, cara…
Faz assim:

jbTipo.getModel().setSelectedItem(usuario.getTipo()); [/quote]

Cara fiz dessa forma e deu um erro:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
	at java.util.ArrayList.elementData(Unknown Source)
	at java.util.ArrayList.get(Unknown Source)
	at model.usuario.BoxModelUserTipo.setSelectedItem(BoxModelUserTipo.java:50)
	at view.ManUsuarios$1.mouseClicked(ManUsuarios.java:149) 

:?

[quote=ViniGodoy]Tem algumas coisas estranhas no seu código.

O método setSelected recebe um objeto da classe Tipo, e você chama indexOf. Porém, sua lista é de Strings e não de Tipos.
O setSelectedItem está recebendo um Object. Tem certeza que esse object também é do tipo String?

O ideal mesmo seria ter um List<Tipo> na sua combo e não um List<String>.[/quote]

Vini mas uma vez agradeço a atenção,!
Cara viz da forma de você falou (ou pelo menos como entendi. rerere)
Mas ainda não deu certo, segue o trecho do que foi alterado codigo:

Classe BoxModeluserTipo:

List &lt;Tipo&gt; tipos = new ArrayList&lt;Tipo&gt;(); 
    
      
    Tipo selected_item = null;  
      
    public BoxModelUserTipo(){
    	this.connection = new ConnectionFactory().getConnection();
        try{  
        	
        	PreparedStatement stmt = connection.prepareStatement("select nome from tipouser"); //Esse select deve trazer apenas uma coluna para facilitar.(coluna q vai no Combobox)  
            ResultSet rs = stmt.executeQuery();  
              
            while(rs.next()){
            	Tipo tipo = new Tipo();
				tipo.setNome(rs.getString("nome"));
				tipos.add(tipo);
                  
            }  
              
            try{  
                //tenta selecionar o primeiro item do array  
                  
                selected_item = tipos.get(0);  
            }catch(Exception ex){  
                ex.printStackTrace();  
            }  
              
        }catch(Exception e){  
            e.printStackTrace();  
              
            //trate sua exeção  
        }  
    }



public void setSelectedItem(Object anItem) {  
        selected_item = tipos.get(tipos.indexOf(anItem)); 
    }

Classe onde chamo o modelo:

jbTipo.getModel().setSelectedItem(usuario.getTipo());

:frowning:

Fiz o Seguinte teste: (e pelo visto, parece que o erro está na forma que a string a ser selecionada no jcombo está sendo gravada no banco… talvez um espaço no final… etc…)

[code]
package testeimplementajcombo;

import java.util.ArrayList;
import javax.swing.ComboBoxModel;
import javax.swing.event.ListDataListener;

/**
*

  • @author Administrador
    */
    public class JCombo implements ComboBoxModel{
    ArrayList tipo = new ArrayList();
    String selected_item = null;

public JCombo(){
tipo.add(“Sandro”);
tipo.add(“Charles”);
tipo.add(“Asafe”);
//preenchendo sem consulta ao banco só pra testar
}
@Override
public void setSelectedItem(Object o) {
selected_item = tipo.get(tipo.indexOf(o));
}

@Override
public Object getSelectedItem() {

return selected_item;
}

@Override
public int getSize() {

return tipo.size();
}

@Override
public Object getElementAt(int index) {

return tipo.get(index);
}

@Override
public void removeListDataListener(ListDataListener ll) {
    throw new UnsupportedOperationException("Not supported yet.");
}

@Override
public void addListDataListener(ListDataListener ll) {
   // throw new UnsupportedOperationException("Not supported yet.");
    System.out.println("oi");
}

}[/code]

e agora implementando:

[code]
package testeimplementajcombo;

import java.awt.;
import javax.swing.
;
import java.util.*;

public class TesteImplementaJCombo extends JFrame{
public TesteImplementaJCombo(){
super(“A classe JComboBox”);

Container c = getContentPane();
c.setLayout(new FlowLayout(FlowLayout.LEFT));

JComboBox jCombo = new JComboBox((new JCombo()));

// Adiciona o JComboBox à janela
c.add(jCombo);

setSize(350, 250);
setVisible(true);

jCombo.setSelectedItem("Sandro"); //aqui tá setando normalmente... talvez  seja erro no seu banco...

}

public static void main(String args[]){
TesteImplementaJCombo app = new TesteImplementaJCombo();

app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
}[/code]

o resultado é um frame com um jcombo selecionado a palavra Sandro.

Galera já resolvi! Obrigado a todos pelas respostas.

Segue o código caso alguém tenha o mesmo problema:

Na classe TipoDAO:

//Método para carregar o Combobox

public void carregaCombo(JComboBox jcTipo){ 
		try{ 
			PreparedStatement stmt = this.connection.prepareStatement("select * from tipouser");
			ResultSet rs = stmt.executeQuery(); 

		while(rs.next()){  
				jcTipo.addItem(rs.getString("nome"));  
		} 


		rs.close();
		stmt.close();
		
		}catch(Exception e){ 
		e.printStackTrace(); 

		} 

Na classe de implementação fiz assim:

jbTipo.removeAllItems();
tipo.carregaCombo(jbTipo);
jbTipo.setSelectedItem(usuario.getTipo());

:lol: