Posicionamento do ResultSet?

10 respostas
rolipam

Boa tarde.

Tenho os seguintes métodos em minha aplicação Java Desktop

// 1. Executa a Consulta e monta o List a partir dos Beans
private List<Bean> consultarRegistros(){
        String sql = "SELECT * FROM SRDM ORDER BY ID DESC";
        solicitacoes = new ArrayList<>();
        try {
            pstm = conecta().prepareStatement(sql);
            rs = pstm.executeQuery(); 
            while(rs.next()){
                bean = new Bean();
                bean.setId(rs.getInt("id"));
                bean.setData(rs.getString("data"));
                bean.setEnfermaria(rs.getString("enfermaria"));
                bean.setMotivo(rs.getShort("motivo"));   
                solicitacoes.add(bean);
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Não Existe Registro!");
            ex.printStackTrace();
        }finally{
            desconecta();
        }
        return solicitacoes;
    }

// 2. Monta os Dados na Tabela a partir do List
private void mostrarSolicitacoes(List<Bean> solicitacoes) {
        tbDados.getColumnModel().getColumn(0).setPreferredWidth(5); // mês/ano
        tbDados.getColumnModel().getColumn(1).setPreferredWidth(5); // enfermaria
        tbDados.getColumnModel().getColumn(2).setPreferredWidth(20); // motivo
        
        while (tmSRDM.getRowCount() > 0) {
            tmSRDM.removeRow(0);
        }
        
        if (solicitacoes.size() == 0) {
            //JOptionPane.showMessageDialog(this, "Nenhum Agendamento Encontrado!");
        } else {
        }

        for (int i = 0; i < solicitacoes.size(); i++) {
            String[] campos = new String[]{null, null, null};
            tmSRDM.addRow(campos);
            tmSRDM.setValueAt(solicitacoes.get(i).getData(), i, 0);
            tmSRDM.setValueAt(solicitacoes.get(i).getEnfermaria(), i, 1);
            tmSRDM.setValueAt(solicitacoes.get(i).getMotivo(), i, 2);
        }
    }

// 3. Mostra os Dados nos Campos a partir do List
private void tbDadosLinhaSelecionada(JTable tb){
            if (tb.getSelectedRow() != -1) {
               tfId.setText("" + solicitacoes.get(tb.getSelectedRow()).getId());
               tfData.setText(solicitacoes.get(tb.getSelectedRow()).getData());
                
               if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("TA")){
                   cbEnfermaria.setSelectedItem("TA - UDAP");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("TB")){
                   cbEnfermaria.setSelectedItem("TB - UTI.2");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("1A")){
                   cbEnfermaria.setSelectedItem("1A - ONCOHEMATO");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("1B")){
                   cbEnfermaria.setSelectedItem("1B - ONCOHEMATO / TMO");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("1C")){
                   cbEnfermaria.setSelectedItem("1C - UPL");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("CS")){
                   cbEnfermaria.setSelectedItem("1CS - UTI.PED");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("1D")){
                   cbEnfermaria.setSelectedItem("1D - CARDIO");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("2A")){
                   cbEnfermaria.setSelectedItem("2A - CLINICA MÉDICA");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("2B")){
                   cbEnfermaria.setSelectedItem("2B - INFECTO");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("2C")){
                   cbEnfermaria.setSelectedItem("2C - OFTALMO");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("2D")){
                   cbEnfermaria.setSelectedItem("2D - CLINICA MÉDICA");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("3B")){
                   cbEnfermaria.setSelectedItem("3B - PSIQUIATRIA");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("3C")){
                   cbEnfermaria.setSelectedItem("3B - NEURO");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("3D")){
                   cbEnfermaria.setSelectedItem("3B - VAZIA");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("4A")){
                   cbEnfermaria.setSelectedItem("4A - CLI. CIR. M");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("4B")){
                   cbEnfermaria.setSelectedItem("4B - GASTRO-HEPATO");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("4C")){
                   cbEnfermaria.setSelectedItem("4C - UTI.1");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("4D")){
                   cbEnfermaria.setSelectedItem("4D - CLI. CIR. F");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("UM")){
                   cbEnfermaria.setSelectedItem("UM - METABÓLLICA");
               }else if(solicitacoes.get(tb.getSelectedRow()).getEnfermaria().equals("XY")){
                   cbEnfermaria.setSelectedItem("XY - OUTRAS");
               }else{
                   cbEnfermaria.setSelectedItem("Selecione ...");
               }
               
                if(solicitacoes.get(tb.getSelectedRow()).getMotivo() == 1){
                    cbMotivo.setSelectedItem("1 - Ampola quebrou durante preparo");
                }else if(solicitacoes.get(tb.getSelectedRow()).getMotivo() == 2){
                    cbMotivo.setSelectedItem("2 - Caiu no chão");
                }else if(solicitacoes.get(tb.getSelectedRow()).getMotivo() == 3){
                    cbMotivo.setSelectedItem("3 - Desprezado");
                }else if(solicitacoes.get(tb.getSelectedRow()).getMotivo() == 4){
                    cbMotivo.setSelectedItem("4 - Erro no preparo (Reconstituição / Diluição)");
                }else if(solicitacoes.get(tb.getSelectedRow()).getMotivo() == 5){
                    cbMotivo.setSelectedItem("5 - Pcte rejeitou, cuspiu, vomitou");
                }else if(solicitacoes.get(tb.getSelectedRow()).getMotivo() == 6){
                    cbMotivo.setSelectedItem("6 - Não encontrado no box");
                }else if(solicitacoes.get(tb.getSelectedRow()).getMotivo() == 7){
                    cbMotivo.setSelectedItem("7 - Sem justificativa");
                }else if(solicitacoes.get(tb.getSelectedRow()).getMotivo() == 8){
                    cbMotivo.setSelectedItem("8 - Outros");
                }else{
                    cbMotivo.setSelectedItem("Selecione ...");
                } 
            }       
        }

Meu problema é o seguinte: Quando clico na linha correspondente ao primeiro registro da tabela (ou seja a primeira linha de baixo pra cima, pois os dados estão em ordem decrescente, mostra os dados do registro normalmente, porém se eu clicar em qualquer outro registro ou percorrer os dados da tabela e voltar para o primeiro registro novamente, já não atualiza mais os comboBox de Enfermaria e Motivo, porém todos os demais dados dos demais registros são mostrados normalmente. Alguém sabe dizer qual pode ser o meu problema?
Agradecido.

10 Respostas

rolipam

Ninguém pra me dar uma luz???
Mais uma coisa, quando clico no botão limpar, o mesmo chama o método abaixo:

// Método Chamado ao clicar no botão Limpar
private void limparCampos(){
        
	tbDados.getSelectionModel().clearSelection();
        
	tfId.setText("");
        
	tfData.setText("");
        
	cbEnfermaria.setSelectedItem("Selecione ...");
        
	cbMotivo.setSelectedItem("Selecione ...");
}

Após limpar todos os campos, e voltar a selecionar o primeiro registro da tabela, volta a mostrar normalmente os dados referente ao primeiro registro e depois de mudar de linha, volta a apresentar o mesmo problema, só atualiza os campos ID e DATA, os jComboBox não atualizam.

RoinujNosde

Manda uma print da janela.

rolipam

Segue as telas do sistema mostrando o erro no terceiro clique, quando retorno ao primeiro registro.

RoinujNosde

Manda o código do listener onde vc chama o método tbDadosLinhaSelecionada()

rolipam

Está aí o Código!

DefaultTableModel tmSRDM = new DefaultTableModel(null, new String[]{"Mês / Ano", "Enfermaria", "Motivo"}) {
        public boolean isCellEditable(int row, int col) {
            return false;
        }
    };

ListSelectionModel lsmSRDM;

tbDados.setModel(tmSRDM);
tbDados.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);  
  
lsmSRDM = tbDados.getSelectionModel();  
  
lsmSRDM.addListSelectionListener(new ListSelectionListener() {          
      
	public void valueChanged(ListSelectionEvent e){          
          
		if(!e.getValueIsAdjusting()){          
              
			tbDadosLinhaSelecionada(tbDados);  
          
		}  
      
	}  
  
});
RoinujNosde

Tem mais alguma parte do código que mexe com os combobox?
Declaração deles, etc

rolipam

O código completo está no GIT-HUB. Pode dar uma olhada lá. Eu só capturo o que está selecionado no ComboBox para Salvar ou Comparo o que está no Banco de Dados com a Descrição no ComboBox para setar corretamente os valores.

RoinujNosde

Comente essa linha e teste o programa. Pra ver se o listener do combobox tá causando esse bug.

rolipam

Mas eu preciso desse evento no jComboBox para pegar o conteúdo selecionado e transformar no valor que salvo no BD conforme código abaixo:

private void cbEnfermariaActionPerformed(java.awt.event.ActionEvent evt) {
    
    if(cbEnfermaria.getSelectedItem().equals("TA - UDAP")){
        bean.setEnfermaria("TA");
        enfermaria = "TA";
        novaEnfermaria = "TA";
    }else if(cbEnfermaria.getSelectedItem().equals("TB - UTI.2")){
        bean.setEnfermaria("TB");
        enfermaria = "TB";
        novaEnfermaria = "TB";
    }else if(cbEnfermaria.getSelectedItem().equals("1A - ONCOHEMATO")){
        bean.setEnfermaria("1A");
        enfermaria = "1A";
        novaEnfermaria = "1A";
    }else if(cbEnfermaria.getSelectedItem().equals("1B - ONCOHEMATO / TMO")){
        bean.setEnfermaria("1B");
        enfermaria = "1B";
        novaEnfermaria = "1B";
    }else if(cbEnfermaria.getSelectedItem().equals("1C - UPL")){
        bean.setEnfermaria("1C");
        enfermaria = "1C";
        novaEnfermaria = "1C";
    }else if(cbEnfermaria.getSelectedItem().equals("1CS - UTI.PED")){
        bean.setEnfermaria("CS");
        enfermaria = "CS";
        novaEnfermaria = "CS";
    }else if(cbEnfermaria.getSelectedItem().equals("1D - CARDIO")){
        bean.setEnfermaria("1D");
        enfermaria = "1D";
        novaEnfermaria = "1D";
    }else if(cbEnfermaria.getSelectedItem().equals("2A - CLINICA MÉDICA")){
        bean.setEnfermaria("2A");
        enfermaria = "2A";
        novaEnfermaria = "2A";
    }else if(cbEnfermaria.getSelectedItem().equals("2B - INFECTO")){
        bean.setEnfermaria("2B");
        enfermaria = "2B";
        novaEnfermaria = "2B";
    }else if(cbEnfermaria.getSelectedItem().equals("2C - OFTALMO")){
        bean.setEnfermaria("2C");
        enfermaria = "2C";
        novaEnfermaria = "2C";
    }else if(cbEnfermaria.getSelectedItem().equals("2D - CLINICA MÉDICA")){
        bean.setEnfermaria("2D");
        enfermaria = "2D";
        novaEnfermaria = "2D";
    }else if(cbEnfermaria.getSelectedItem().equals("3B - PSIQUIATRIA")){
        bean.setEnfermaria("3B");
        enfermaria = "3B";
        novaEnfermaria = "3B";
    }else if(cbEnfermaria.getSelectedItem().equals("3C - NEURO")){
        bean.setEnfermaria("3C");
        enfermaria = "3C";
        novaEnfermaria = "3C";
    }else if(cbEnfermaria.getSelectedItem().equals("3D - VAZIA")){
        bean.setEnfermaria("3D");
        enfermaria = "3D";
        novaEnfermaria = "3D";
    }else if(cbEnfermaria.getSelectedItem().equals("4A - CLI. CIR. M")){
        bean.setEnfermaria("4A");
        enfermaria = "4A";
        novaEnfermaria = "4A";
    }else if(cbEnfermaria.getSelectedItem().equals("4B - GASTRO-HEPATO")){
        bean.setEnfermaria("4B");
        enfermaria = "4B";
        novaEnfermaria = "4B";
    }else if(cbEnfermaria.getSelectedItem().equals("4C - UTI.1")){
        bean.setEnfermaria("4C");
        enfermaria = "4C";
        novaEnfermaria = "4C";
    }else if(cbEnfermaria.getSelectedItem().equals("4D - CLI. CIR. F")){
        bean.setEnfermaria("4D");
        enfermaria = "4D";
        novaEnfermaria = "4D";
    }else if(cbEnfermaria.getSelectedItem().equals("UM - METABÓLICA")){
        bean.setEnfermaria("UM");
        enfermaria = "UM";
        novaEnfermaria = "UM";
    }else if(cbEnfermaria.getSelectedItem().equals("XY - OUTRAS")){
        bean.setEnfermaria("XY");
        enfermaria = "XY";
        novaEnfermaria = "XY";
    }else{
        bean.setEnfermaria(""); // cbEnfermaria.getSelectedItem().equals("Selecione ...");
        enfermaria = "";
        novaEnfermaria = "";
    }
}

private void cbMotivoActionPerformed(java.awt.event.ActionEvent evt) {
    
    if(cbMotivo.getSelectedItem().equals("1 - Ampola quebrou durante preparo")){
        bean.setMotivo(Short.valueOf("1"));
        motivo = Short.valueOf("1");
        novoMotivo = Short.valueOf("1");
    }else if(cbMotivo.getSelectedItem().equals("2 - Caiu no chão")){
        bean.setMotivo(Short.valueOf("2"));
        motivo = Short.valueOf("2");
        novoMotivo = Short.valueOf("2");
    }else if(cbMotivo.getSelectedItem().equals("3 - Desprezado")){
        bean.setMotivo(Short.valueOf("3"));
        motivo = Short.valueOf("3");
        novoMotivo = Short.valueOf("3");
    }else if(cbMotivo.getSelectedItem().equals("4 - Erro no preparo (Reconstituição / Diluição)")){
        bean.setMotivo(Short.valueOf("4"));
        motivo = Short.valueOf("4");
        novoMotivo = Short.valueOf("4");
    }else if(cbMotivo.getSelectedItem().equals("5 - Pcte rejeitou, cuspiu, vomitou")){
        bean.setMotivo(Short.valueOf("5"));
        motivo = Short.valueOf("5");
        novoMotivo = Short.valueOf("5");
    }else if(cbMotivo.getSelectedItem().equals("6 - Não encontrado no box")){
        bean.setMotivo(Short.valueOf("6"));
        motivo = Short.valueOf("6");
        novoMotivo = Short.valueOf("6");
    }else if(cbMotivo.getSelectedItem().equals("7 - Sem justificativa")){
        bean.setMotivo(Short.valueOf("7"));
        motivo = Short.valueOf("7");
        novoMotivo = Short.valueOf("7");
    }else if(cbMotivo.getSelectedItem().equals("8 - Outros")){
        bean.setMotivo(Short.valueOf("8"));
        motivo = Short.valueOf("8");
        novoMotivo = Short.valueOf("8");
    }else{
        bean.setMotivo(Short.valueOf("0")); // cbMotivo.getSelectedItem().equals("Selecione ...")
        motivo = Short.valueOf("0");
        novoMotivo = Short.valueOf("0");
    }
RoinujNosde

Ah, sim.
É só para testar mesmo. Pra tentar descobrir a causa.

Criado 15 de março de 2021
Ultima resposta 21 de mar. de 2021
Respostas 10
Participantes 2