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!!
Já experimentou usar .toString() ?
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