Dúvida no retorno de informação de um banco de dados!

Olá pessoal, minha duvida está no retorno das informações no banco, estou desenvolvendo um código para aprendizado mesmo, e existe uma tela para a pesquisa dos cargos cadastrados, consegui fazer o link com o banco e inserir informações em outra tela, mas quando vou buscar essas informações, ela vem no formato apresentado nas imagens que enviei (sou novato e pude enviar somente uma), e o mais engraçado é que quando vou deletar um cargo, aparece o nome certo, se alguém puder me dar uma luz, ficarei grato! Ele esta funcionando, pesquisando e excluindo, porem apresentando acho que eu a referencia do objeto e não objeto em si!!resultado_excluir

Já experimentou usar .toString() ?

1 curtida

O que está aparecendo nessas linhas é o resultado da implementação padrão do método toString() da classe Cargo.

Que componente é, JList ou JTable?
Como você está populando esse componente?
Implementou um ListModel ou um TableModel?

Posta o código e não esqueça de formatar como o botão </>.

Tenta utilizar o CellFactory esse metodo da um update em cada objeto da Lista:

ListView<Cargo> listView = ...
listView.setCellFactory(lv -> new ListCell<Cargo>() {

@Override
protected void updateItem(Cargo cargo, boolean empty) {
    super.updateItem(cargo, empty);
    if (empty || cargo == null) {
        setText("");  // Para deixar vazio caso seja nulo
    } else {
        // Nome do cargo
        setText(cargo.getName());
    }
} 

});

Cuidado com o que vai fazer dentro do método updateItem, isso pode fazer com que sua aplicação demore para carregar as listas. Pode utilizar um thread pool caso deseje fazer algo mais avançado.

package sistema.telas;

import java.awt.Font;Texto pré-formatado
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.JTextField;
import sistema.BancoDeDados;
import sistema.entidades.Cargo;

public class CargosConsultar extends JPanel {
    
    Cargo cargoAtual;
    JLabel labelTitulo, labelCargo;
    JTextField campoCargo;
    JButton botaoPesquisar, botaoEditar, botaoExcluir;
    DefaultListModel<Cargo> listasCargosModelo = new DefaultListModel();
    JList<Cargo> listaCargos;

public CargosConsultar(){
    criarComponentes();
    criarEventos();
}

private void criarComponentes(){
    setLayout(null);
    
    labelTitulo = new JLabel("Consulta de Cargos", JLabel.CENTER);
    labelTitulo.setFont(new Font(labelTitulo.getFont().getName(), Font.PLAIN, 20));
    labelCargo = new JLabel("Nome do cargo", JLabel.LEFT);
    campoCargo = new JTextField();
    botaoPesquisar = new JButton("Pesquisar Cargo");
    botaoEditar = new JButton("Editar Cargo");
    botaoEditar.setEnabled(false);
    botaoExcluir = new JButton("Excluir Cargo");
    botaoExcluir.setEnabled(false);
    listasCargosModelo = new DefaultListModel();
    listaCargos = new JList();
    listaCargos.setModel(listasCargosModelo);
    listaCargos.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
    
            
    labelTitulo.setBounds(20, 20, 660, 40);
    labelCargo.setBounds(150, 120, 400, 20);
    campoCargo.setBounds(150, 140, 400, 40);
    botaoPesquisar.setBounds(560, 140, 130, 40);
    listaCargos.setBounds(150, 200, 400, 240);
    botaoEditar.setBounds(560, 360, 130, 40);
    botaoExcluir.setBounds(560, 400, 130, 40);
    
    add(labelTitulo);
    add(labelCargo);
    add(campoCargo);
    add(listaCargos);
    add(botaoPesquisar);
    add(botaoEditar);
    add(botaoExcluir);
    
    setVisible(true);
    
}

private void criarEventos(){
    botaoPesquisar.addActionListener(new ActionListener(){
       @Override
       public void actionPerformed(ActionEvent e){
           sqlPesquisarCargos(campoCargo.getText());
       }
    });
    botaoEditar.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){
            
        }            
    });
    botaoExcluir.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){
            sqlDeletarCargo();                
        }            
    });
    listaCargos.addListSelectionListener(new ListSelectionListener(){
        @Override
        public void valueChanged(ListSelectionEvent e){
            cargoAtual = listaCargos.getSelectedValue();
            if(cargoAtual == null){
                botaoEditar.setEnabled(false);
                botaoExcluir.setEnabled(false);                    
            }else{
                botaoEditar.setEnabled(true);
                botaoExcluir.setEnabled(true);
            }
        }            
    });
}

private void sqlPesquisarCargos (String nome){
    
    //conexão
    Connection conexao;
    //intrução SQL
    Statement instrucaoSQL;
    // resultados
    ResultSet resultados;
    
    try{
        //conectando ao banco de dados
        conexao = DriverManager.getConnection(BancoDeDados.stringDeConexao, BancoDeDados.usuario, BancoDeDados.senha);
        
        // criando a instrução SQL
        instrucaoSQL = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
        resultados = instrucaoSQL.executeQuery("SELECT * FROM cargos WHERE nome like '%"+nome+"%'");
        
        listasCargosModelo.clear();
        
        while (resultados.next()){
            Cargo cargo = new Cargo();
            cargo.setId(resultados.getInt("id"));
            cargo.setNome(resultados.getString("nome"));
            
            
            listasCargosModelo.addElement(cargo);
        }
       
    }catch(SQLException ex){
        
        JOptionPane.showMessageDialog(null, "Ocorreu um erro ao consultar os cargos.");
        Logger.getLogger(CargosInserir.class.getName()).log(Level.SEVERE, null, ex);            
        
    }
    
}

private void sqlDeletarCargo(){
    
    int confirmacao = JOptionPane.showConfirmDialog(null, "Deseja realmente excluir o Cargo: "+cargoAtual.getNome()+"?", "Excluir", JOptionPane.YES_NO_OPTION);
    if (confirmacao == JOptionPane.YES_OPTION){
   
    //conexão
    Connection conexao;
    //intrução SQL
    Statement instrucaoSQL;
    // resultados
    ResultSet resultados;
    
    try{
        //conectando ao banco de dados
        conexao = DriverManager.getConnection(BancoDeDados.stringDeConexao, BancoDeDados.usuario, BancoDeDados.senha);
        
        // criando a instrução SQL
        instrucaoSQL = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
        instrucaoSQL.executeUpdate("Delete cargos WHERE id="+cargoAtual.getId()+"");
        
        JOptionPane.showMessageDialog(null, "Cargo deletado com sucesso!");
       
    }catch(SQLException ex){
        
        JOptionPane.showMessageDialog(null, "Ocorreu um erro ao excluir o cargos.");
        Logger.getLogger(CargosInserir.class.getName()).log(Level.SEVERE, null, ex);            
        
    } 
}

}
}

Como estou seguindo um curso online, utilizei o código apresentado na tela, e no curso o resultado deu certo, e aparentemente não utilizava o .toString(), então por isso ainda não tentei.

Olá Cristian, como estou seguindo um curso online, estava usando o código como apresentado na tela, mas no curso, o código funcionava, pode até ser na tela tenha faltado alguma parte do código mas o que você falou é verdade, apesar de ter poucas opções no banco, ela demora um pouco a aparecer.

Não usa o DefaultListModel, implemente seu próprio modelo para renderizar uma lista de Cargo.

Vou tentar isso, continuei o projeto, e deu muito mais erros, antes era só esse, eu não sei se sou eu ou alguém que fecha o tópico, eu procurei e não achei como fechar, agradeço a todos que postaram as soluções