Setar JComboBox

14 respostas
Jhouw

Ola pessoal, to penando com uma coisa que acredito ser simples...

tenho uma tela com um grid, onde mostra os itens do cadastro... quando clicado em um unico item e depoia apertar no botão editar... ou der 2 cliks em 1 item do grid é carregada a tela de cadastro, com os itens ja setados...

os campos JTextField carregam blz... mas o JComboBox nao :(

ta ai o codigo do botão Editar.... :arrow:
private void btnEditarActionPerformed(java.awt.event.ActionEvent evt) {                                          

        if (tabelaTurmas.getSelectedRowCount() == 0) {
            // Mensagem informativa
            JOptionPane.showMessageDialog(this.getParent(),
                    "Nenhum item selecionado",
                    "Erro", JOptionPane.ERROR_MESSAGE);
        } else
            if (tabelaTurmas.getSelectedRowCount() > 1) {

                JOptionPane.showMessageDialog(this.getParent(),
                        "Selecione apenas um item",
                        "Erro", JOptionPane.ERROR_MESSAGE);
            } else {
            int linha = tabelaTurmas.getSelectedRow();

            Integer codigo = (Integer)
                    tabelaTurmas.getValueAt(linha, 0);
            String nome = (String)
                    tabelaTurmas.getValueAt(linha, 1);

            String turno = (String)
                    tabelaTurmas.getValueAt(linha, 2);

            String profe = (String)
                    tabelaTurmas.getValueAt(linha, 3);

            String escola = (String)
                    tabelaTurmas.getValueAt(linha, 4);
           
            CadastroTurma cesc = new CadastroTurma();

            cesc.textCodigo.setText(codigo.toString());
            cesc.textNome.setText(nome);
            cesc.jbcTurno.setSelectedItem(turno);
            cesc.jbcProf.setSelectedItem(profe);
            cesc.jbcEscola.setSelectedItem(escola);
            cesc.setVisible(true);
            ListarTurma();
            }
}
aqui a classe da tela de cadastro...
public class CadastroTurma extends javax.swing.JFrame {

    /** Creates new form CadastroTurma */
    public CadastroTurma() {
        initComponents();
        carregaEscola();
        carregaProf();
        carregaTurno();

    }

    private void carregaEscola(){

        EscolaFacade escolaControle = new EscolaFacade();
        Collection colEscolas =
                escolaControle.ListarEscolas();
        Iterator it = colEscolas.iterator();

        
            jbcEscola.addItem("(Selecione um Escola)");
        

        while (it.hasNext()) {
            Escola oEscola = (Escola)it.next();

            jbcEscola.addItem(oEscola);

        }
    }

    private void carregaProf(){

        ProfessorFacade professorControle = new ProfessorFacade();
        Collection colEscolas =
                professorControle.listaProfessores();
        Iterator it = colEscolas.iterator();

        
        jbcProf.addItem("(Selecione um Professor)");
        
        while (it.hasNext()) {
            Professor oProf = (Professor)it.next();

            jbcProf.addItem(oProf);

        }

    }

    private void carregaTurno(){

        TurnoFacade turnoFacade = new TurnoFacade();
        Collection colTurnos =
                turnoFacade.listaTurnos();
        Iterator it = colTurnos.iterator();

        
        jbcTurno.addItem("(Selecione um Turno)");
        
        while (it.hasNext()) {
            Turno oTurno = (Turno)it.next();

            jbcTurno.addItem(oTurno);

        }

    }

galera, ja tentei coloca um IF antes do while , mas nao tive sucesso...

vlws a atenção de quem leu o post :D
abraço

14 Respostas

V

E ai…

Voce tem algum erro quando tenta popular o JComboBox ?
O combo chega a exibir a linha jbcTurno.addItem("(Selecione um Turno)"); que vc adiciona antes do while ?

franciscossouza

Tenta adicionar o conteúdo diretamente no ComboBoxModel (:

Jhouw
Entao galera... o JComboBox fica com conteudo sim... com os dados carregados diretamente do banco de dados pela classe
private void carregaEscola(){

        EscolaFacade escolaControle = new EscolaFacade();
        Collection colEscolas =
                escolaControle.ListarEscolas();
        Iterator it = colEscolas.iterator();

        
            jbcEscola.addItem("(Selecione um Escola)");
        

        while (it.hasNext()) {
            Escola oEscola = (Escola)it.next();

            jbcEscola.addItem(oEscola);

        }
    }

oq eu queria... é que, quando o fosse clicado duas vezes no grid, a tela de cadastros fosse carregada com os respectivos dados do grid
os campos textField carregam... só os JComboBox que nao :(

[img]http://i365.photobucket.com/albums/oo94/Jhouw/printSAPA-1.jpg[/img]

vlws pessoal
abraço

franciscossouza

Sua lista de escolas está vindo preenchida? Ele não chega a adicionar nada no ComboBox além do “(Selecione um Escola)”?

Abraços :wink:

Jhouw

sim, ele ta sendo alimentado, com os dados da tabela

só eu queria q o item selecionado na tela de Cadastro, fosse o respctivo item do Grid da tela de Controle de Turmas

franciscossouza

Ah sim, entendi (: Uma dúvida: você tem uma classe Escola ou trabalha com String?

Você precisa utilizar o método setSelectedItem da classe JComboBox.

Jhouw

pode cre to usando… olha no meu primeiro post, o primeiro codigo q eu colei, bem no finalzinho

franciscossouza

Então você ta trabalhando com listas de strings? Tipo, a variável colEscolas é uma Collection onde cada item é um String? Ou existe uma classe Escola?

Jhouw

entao... vo da mais umas informações

tenho a tabela

Turma
CD_TURMA (PK)
CD_PROFESSOR(FK)
CD_ESCOLA(FK)
CD_TURNO(FK)
DESC_TURMA
ATIVA

aew tenho a tebela
ESCOLA

CD_ESCOLA(PK)
DESC_ESCOLA
ATIVA

a minha classe turma ta assim
public class Turma {

   private Integer codigo;
   private Escola  escola;
   private Professor professor;
   private String  descricao;
   private Turno turno;
   private Boolean ativa;

//pra baixo tem os getter and setter

e tenho a classe TurmaDao, que tem o metodo ListarTurmas que alimenta o grid

public Collection ListarTurmas() {
        Collection listaTurmas = new ArrayList();
        try {
            //con = getConnection();
            con = DaoConnection.getInstance().getConnection();
            Statement comando = con.createStatement();
            ResultSet rs = comando.executeQuery
                    ("Select * from turma where ativa = true");

            while(rs.next()) {
                Turma turma = new Turma();
                
                turma.setCodigo(rs.getInt("CD_Turma"));
                turma.setProfessor(new ProfessorDao().findByCodigo(rs.getInt("CD_professor")));
                turma.setDescricao(rs.getString("DESC_turma"));
                turma.setTurno(new TurnoDao().findByCodigo(rs.getInt("CD_turno")));
                turma.setEscola(new EscolaDao().findByCodigo(rs.getInt("cd_escola")));
                turma.setAtiva(rs.getBoolean("ATIVA"));

                listaTurmas.add(turma);
            }
            rs.close();
            comando.close();
            con = null;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return listaTurmas;
    }
aew eu tenho na Classe EscolaDao, a classe que pesquisa as escolas... q eu uso pra alimentar o JComboBox
public Collection ListarEscolas() {
        Collection listaEscolas = new ArrayList();
        try {
            con = DaoConnection.getInstance().getConnection();
            Statement comando = con.createStatement();
            ResultSet rs = comando.executeQuery("Select * from escola where ativa = true");

            while(rs.next()) {
                Escola escola = new Escola();
                escola.setCodigo(rs.getInt("CD_ESCOLA"));
                escola.setDescricao(rs.getString("DESC_ESCOLA"));
                escola.setAtiva(rs.getBoolean("ATIVA"));

                listaEscolas.add(escola);
            }
            rs.close();
            comando.close();
            con = null;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return listaEscolas;
    }

é +ou- por aew que funciona o negocio

franciscossouza

Ah, entendi. Não vai funcionar mesmo (: Vamos lá então, hoje seu código está desta forma:

cesc.jbcTurno.setSelectedItem(turno); cesc.jbcProf.setSelectedItem(profe); cesc.jbcEscola.setSelectedItem(escola);
Qual o tipo de cada item no seu JComboBox “jbcEscola”? Escola. Qual o tipo de item que você está tentando setar como selecionado (variável escola)? String.

O setSelectedItem funciona trabalha com o método equals de cada item. Então, para gerar o comportamento que você deseja, você deve implementar na sua classe Escola o método equals que determina que duas escolas são iguais desde que tenham o mesmo nome, mais ou menos assim:

public boolean equals(Object other) { Escola outraEscola = (Escola)other; return this.descricao.equals(outraEscola.getDescricao()); }
Lembrando que esse equals está despadronizado, mas eu estou “programando” direto no fórum, depois você ajusta (: Mas a ideia é esta.

Você tem agora duas alterantivas: setar o item selecionado (setSelectedItem) passando uma escola [1], ou adaptar o seu equals para comparar uma String [2].

[1] setSelectedItem passando um objeto do tipo Escola

Esta parte…

… deve ser estendida (:

Escola oEscola = new Escola(); oEscola.setDescricao(escola); cesc.jbcEscola.setSelectedItem(oEscola);
Então seu equals fica naquele formato mais acima.

[2] equals recebendo uma String

Você mantém a parte do setSelectedItem que estava usando antes e seu equals fica um pouco diferente:

public boolean equals(Object other) { if (other.getClass().equals(String.class)) { return this.descricao.equals(other.toString()); } Escola outraEscola = (Escola)other; return this.descricao.equals(outraEscola.getDescricao()); }
Isso se aplica a todas as classes com representação em ComboBox. Você obtém uma String da tabela, mas não trabalha com Strings no ComboBox, então é necessário o ajuste (:

Jhouw

oowww man thx ^^

vo testa ja ja, e venho posta aqui pra te da o FeedBack

vlws mesmo
^^

abraço

Jhouw

bah, fiz do jeito 1 e do jeito 2, mas nao deu certo ;x

sabe oq qé q eu to achando… tipo… eu seto o combo, aew chamo a classe de cadastro de turmas, aew quando a classe inicia ela inicia os metodo pra carrega os combos… aew eu acho que o q eu tinha setado antes se perde ;x

vo tenta carrega o combo e dpois setar… isso na classe de Controle de Turma, ou entao fazer o mesmo la na classe do Cadastro…

Jhouw

Esquece tudo as bobagem q eu disse no ultimo post xD

fiz bem certinho agora, usei o equals
ta fzendo oq é pra fazer agora

obrigadasso mano :smiley:

abraço

franciscossouza

Por nada cara (:

Precisando estamos ae /o/

Abração (:

Criado 26 de outubro de 2009
Ultima resposta 28 de out. de 2009
Respostas 14
Participantes 3