Ajuda com jComboBox

11 respostas
E

Boa noite,
Estou tentando usar o componente JComboBox, só que está dando o seguinte erro:

Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException: Not supported yet.
	at classesNegocios.Aluno.setTipo(Aluno.java:187)
	at GUI.FichaAluno.jButton1ActionPerformed(FichaAluno.java:348)
	at GUI.FichaAluno.access$000(FichaAluno.java:28)
	at GUI.FichaAluno$1.actionPerformed(FichaAluno.java:120)

(Aluno.java:187) é essa linha do código:

throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.

(Aluno.java:187) é essa linha do código:

aluno.setTipo(ComboBox.getSelectedItem().toString());

Estou tentando pegar o item escolhido no comboBox da ficha e jogar para banco de dados, mais só que está ocorrendo o erro citado acima. A variável tipo foi declarado como INT.

11 Respostas

fabiocortolan

Se a variável TIPO foi declarada como “int” vai dar erro ao tentar inserir uma String nela: “getSelectedItem().toString()”. Não sei se vai resolver seu problema, mas tente falar a conversão de String para int, ou se o valor dentro do combobox for numérico, utilize apenas o “getSelectedItem()” e faça a conversão de objeto para int.

E

Consegui resolver o problema para inserir no banco de dados foi só transformar para String mesmo.Só que estou com problema na hora de validar campo, eu uso esse código para validar os campos do formulário:

if ((jTextField1.getText().isEmpty()) ||( jTextField2.getText().contains("_")) || (jTextField3.getText().isEmpty()) || (jTextField4.getText().isEmpty()) || (jTextField5.getText().isEmpty()) || (jTextField6.getText().isEmpty()) || (jTextField7.getText().isEmpty()) || (jTextField8.getText().isEmpty()) ) {

No ComboBox que eu criei o inválido seria o “Selecionar” no caso na posição 0.

No caso do ComboBox como seria?

fabiocortolan

Para validar vc pode usar “getSelectedIndex()” e verificar se o índice é = 0. Acredito q seja a melhor forma.

ViniGodoy

Está dando erro justamente porque a linha 187 da classe aluno está disparando o erro. Gerar um erro é o papel fundamental do comando throw.

Conserte o método setTipo da classe aluno para algo como:
this.tipo = tipo;

E

Usando o “getSelectedIndex()”, está dando erro no código:

if ((jTextField1.getText().isEmpty()) ||( jTextField2.getText().contains("_"))

|| (jTextField3.getText().isEmpty()) || (jTextField4.getText().isEmpty())

|| (jTextField5.getText().isEmpty()) || (jTextField6.getText().isEmpty())

|| (jTextField7.getText().isEmpty()) || (jTextField8.getText().isEmpty())

|| (ComboBox.getSelectedIndex())) {

Aparece essa mensagem de erro:

bad operand types for binary operator “||”
first type: boolean
second type:int

E nesse caso?

ViniGodoy

O método getSelectedIndex() retorna um número. Para isso funcionar, tem que comparar esse número com alguma coisa… Por exemplo:

|| (ComboBox.getSelectedIndex() == -1)) {
E

O || (ComboBox.getSelectedIndex() == 0)) { , funcionou perfeitamente,obrigado. Só que eu queria dar uma melhorada nessa código de validação,tipo para cada campo fazer um if depois de percorrer todos os ifs ele iria pro else, como faço isso sem que ele percorra o primeiro if e já pule pro else?

// fazendo a validação dos dados

        if ((jTextField1.getText().isEmpty()) ||( jTextField2.getText().contains("_"))
                || (jTextField3.getText().isEmpty()) || (jTextField4.getText().isEmpty())
                || (jTextField5.getText().isEmpty()) || (jTextField6.getText().isEmpty())
                || (jTextField7.getText().isEmpty()) || (jTextField8.getText().isEmpty())
                || (ComboBox.getSelectedIndex() == 0)) {  

            JOptionPane.showMessageDialog(null, "Existem campos inválidos.", "Informação do Sistema", JOptionPane.WARNING_MESSAGE, new ImageIcon(getClass().getResource("/imagens/info.png")));

             } else {

            aluno.setNome(jTextField1.getText());
            aluno.setCpf(jTextField2.getText());
            aluno.setDtnascimento(jTextField3.getText());
            aluno.setTelefone(jTextField4.getText());
            aluno.setEndereco(jTextField5.getText());
            aluno.setCep(jTextField6.getText());
            aluno.setEmail(jTextField7.getText());
            aluno.setDtmatricula(jTextField8.getText());
            aluno.setTipo(ComboBox.getSelectedItem().toString());;
            setResult(0);
            setVisible(false);

            JOptionPane.showMessageDialog(this, "Aluno " + jTextField1.getText() + " inserido com sucesso!","Informação do Sistema", JOptionPane.OK_OPTION,new ImageIcon(getClass().getResource("/imagens/good.png")));
        }
ViniGodoy

Eu geralmente evito o else fazendo return. É uma técnica conhecida como code guard:

if((jTextField1.getText().isEmpty()) {
     JOptionPane.showMessageDialog(this, "Nome inválido!", 
         "Informação do Sistema", JOptionPane.WARNING_MESSAGE, 
         new ImageIcon(getClass().getResource("/imagens/info.png")));
     jTextField1.requestFocusInWindow();
     return; 
}

if((jTextField2.getText().contains("_")) {
     JOptionPane.showMessageDialog(this, "CPF inválido!", 
         "Informação do Sistema", JOptionPane.WARNING_MESSAGE, 
         new ImageIcon(getClass().getResource("/imagens/info.png")));
     jTextField1.requestFocusInWindow();
     return; 
}

//Demais ifs aqui

//Agora você pode colocar sem else, pq se caiu num if, já saiu do método devido ao return.
aluno.setNome(jTextField1.getText());  
aluno.setCpf(jTextField2.getText());  
//Resto do método aqui

Cuidado: O primeiro parâmetro de um JOptionPane deve ser a janela que está abrindo o OptionPane. Geralmente vai ser this ou NomeDaJanela.this

Finalmente, dê nomes decentes para esses seus textFields. Seria melhor chama-los de txtNome, txtCPF e assim por diante...

E

Obrigado. Usando Return fica bem mais prático. Em relação aos nomes campos dos realmente tenho que mudar :smiley: .

E

Obrigado. Usando Return fica bem mais prático. Em relação aos nomes campos dos realmente tenho que mudar .

E

Estou usando uma JtabbedPane com duas Jpanel uma Dados e outra Endereço , no código de validação dos campos estou usando o requestFocusInWindow();, que caso o campo esteja inválido e eu aperte para inserir os dados o cursor vai para ele, mais se eu tiver no Panel Dados e o erro estiver no campo de Panel Endereço ou vice e versa o curso não vai. Teria como usar outro comando para que quando der a mensagem de erro mude do Panel Dados para o Panel Endereço ou vice e versa?

Trecho do código:

if ((txtTelefone.getText().contains("_"))) { JOptionPane.showMessageDialog(this, "Telefone Inválido!", "Informação do Sistema", JOptionPane.WARNING_MESSAGE, new ImageIcon(getClass().getResource("/imagens/info.png"))); txtEndereco.requestFocusInWindow(); return; }

Criado 4 de abril de 2013
Ultima resposta 4 de abr. de 2013
Respostas 11
Participantes 3