Como eu listo um usuário buscado no banco de dados com uma JTable? com eclipse

3 respostas
alessandro_jacques
package DAO; import java.sql.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;

import javax.swing.JOptionPane;

@SuppressWarnings("unused") public class conectaBD {


public static Connection conectabd() throws ClassNotFoundException {

    try {
        Class.forName("org.postgresql.Driver");
         Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/crud","postgres","tmk9405");
        JOptionPane.showMessageDialog(null,"Conectado com sucesso!");
        return con;
    }

    catch (SQLException error) {

        JOptionPane.showMessageDialog(null, error);
        return null;
    }   
}
}


package visual;

import java.awt.BorderLayout; import java.awt.EventQueue; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet;

import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder;

import java.sql.*; import DAO.conectaBD; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField; import java.awt.Font; import javax.swing.JButton; import javax.swing.JPasswordField; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.GridBagLayout; import java.awt.GridBagConstraints; import java.awt.Insets; import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; import javax.swing.SwingConstants; import javax.swing.border.TitledBorder; import java.awt.Toolkit; import java.awt.Color; import javax.swing.ImageIcon;

@SuppressWarnings("unused") public class frmLogin extends JFrame {

```
/**
 * 
 */
private static final long serialVersionUID = 1L;
private JPanel contentPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                frmLogin frame = new frmLogin();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */

Connection con = null;
PreparedStatement pst = null;
ResultSet rs = null;
private JTextField txtUsuario;
private JPasswordField txtSenha;
private JLabel lblLogin;
private JLabel lblSistemaDesenvolvidoPela;

public frmLogin() throws ClassNotFoundException {
    setIconImage(Toolkit.getDefaultToolkit().getImage("C:\\Users\\Alessandro\\Downloads\\icons8-senha-50.png"));
    setTitle("Login de usu\u00E1rio");


    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 640, 299);
    contentPane = new JPanel();
    contentPane.setBorder(new TitledBorder(null, "", TitledBorder.CENTER, TitledBorder.TOP, null, null));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JLabel lblUsurio = new JLabel("Usu\u00E1rio:");
    lblUsurio.setBounds(139, 70, 85, 20);
    lblUsurio.setHorizontalAlignment(SwingConstants.CENTER);
    lblUsurio.setFont(new Font("Arial", Font.BOLD, 12));
    contentPane.add(lblUsurio);

    txtUsuario = new JTextField();
    txtUsuario.setBounds(224, 73, 179, 20);
    txtUsuario.setColumns(10);
    contentPane.add(txtUsuario);

    JLabel lblSenha = new JLabel("senha:");
    lblSenha.setBounds(139, 106, 85, 20);
    lblSenha.setHorizontalAlignment(SwingConstants.CENTER);
    lblSenha.setFont(new Font("Arial", Font.BOLD, 12));
    contentPane.add(lblSenha);

    JButton btnEntrar = new JButton("ENTRAR");
    btnEntrar.setIcon(new ImageIcon("C:\\Users\\Alessandro\\Downloads\\icones\\Icones\\accept.png"));
    btnEntrar.setBounds(262, 166, 104, 23);
    btnEntrar.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            Logar();
        }
    });

    txtSenha = new JPasswordField();
    txtSenha.setBounds(224, 107, 179, 20);
    contentPane.add(txtSenha);
    contentPane.add(btnEntrar);

    lblLogin = new JLabel("LOGIN");
    lblLogin.setFont(new Font("Arial", Font.BOLD, 15));
    lblLogin.setBounds(262, 11, 67, 21);
    contentPane.add(lblLogin);

    lblSistemaDesenvolvidoPela = new JLabel("Sistema desenvolvido por Alesssandro Jacques.)");
    lblSistemaDesenvolvidoPela.setForeground(Color.BLACK);
    lblSistemaDesenvolvidoPela.setFont(new Font("SansSerif", Font.PLAIN, 10));
    lblSistemaDesenvolvidoPela.setBounds(233, 256, 391, 14);
    contentPane.add(lblSistemaDesenvolvidoPela);
    this.setLocationRelativeTo(null); // centralizando formulario
    con = conectaBD.conectabd();

    setResizable(false); //Bloquando a opção maximizar a tela de login
}
    @SuppressWarnings("deprecation")
    public void Logar() {
        String sql = "Select * from login where usuario = ? and senha = ?";
        try {
            pst = con.prepareStatement(sql);
            pst.setString(1, txtUsuario.getText());
            pst.setString(2, txtSenha.getText());

            rs = pst.executeQuery();

            if(rs.next()) {
                frmPrincipal frm = new frmPrincipal();
                frm.setVisible(true);
                dispose();
            }else {
                JOptionPane.showMessageDialog(null,"Usuario e senha inválidos.");
            }
        }
        catch(SQLException error) {
            JOptionPane.showMessageDialog(null, error);
        }
    }
}

//Classe DAO

package DAO; import java.sql.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;

import javax.swing.JOptionPane;

@SuppressWarnings(“unused”) public class conectaBD {

public static Connection conectabd() throws ClassNotFoundException {

    try {
        Class.forName("org.postgresql.Driver");
         Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/crud","postgres","tmk9405");
        JOptionPane.showMessageDialog(null,"Conectado com sucesso!");
        return con;
    }

    catch (SQLException error) {

        JOptionPane.showMessageDialog(null, error);
        return null;
    }   
}

}

//Form LOGIN

package visual;

import java.awt.BorderLayout; import java.awt.EventQueue; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet;

import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder;

import java.sql.*; import DAO.conectaBD; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField; import java.awt.Font; import javax.swing.JButton; import javax.swing.JPasswordField; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.GridBagLayout; import java.awt.GridBagConstraints; import java.awt.Insets; import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; import javax.swing.SwingConstants; import javax.swing.border.TitledBorder; import java.awt.Toolkit; import java.awt.Color; import javax.swing.ImageIcon;

@SuppressWarnings(“unused”) public class frmLogin extends JFrame {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private JPanel contentPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                frmLogin frame = new frmLogin();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */

Connection con = null;
PreparedStatement pst = null;
ResultSet rs = null;
private JTextField txtUsuario;
private JPasswordField txtSenha;
private JLabel lblLogin;
private JLabel lblSistemaDesenvolvidoPela;

public frmLogin() throws ClassNotFoundException {
    setIconImage(Toolkit.getDefaultToolkit().getImage("C:\\Users\\Alessandro\\Downloads\\icons8-senha-50.png"));
    setTitle("Login de usu\u00E1rio");


    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 640, 299);
    contentPane = new JPanel();
    contentPane.setBorder(new TitledBorder(null, "", TitledBorder.CENTER, TitledBorder.TOP, null, null));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JLabel lblUsurio = new JLabel("Usu\u00E1rio:");
    lblUsurio.setBounds(139, 70, 85, 20);
    lblUsurio.setHorizontalAlignment(SwingConstants.CENTER);
    lblUsurio.setFont(new Font("Arial", Font.BOLD, 12));
    contentPane.add(lblUsurio);

    txtUsuario = new JTextField();
    txtUsuario.setBounds(224, 73, 179, 20);
    txtUsuario.setColumns(10);
    contentPane.add(txtUsuario);

    JLabel lblSenha = new JLabel("senha:");
    lblSenha.setBounds(139, 106, 85, 20);
    lblSenha.setHorizontalAlignment(SwingConstants.CENTER);
    lblSenha.setFont(new Font("Arial", Font.BOLD, 12));
    contentPane.add(lblSenha);

    JButton btnEntrar = new JButton("ENTRAR");
    btnEntrar.setIcon(new ImageIcon("C:\\Users\\Alessandro\\Downloads\\icones\\Icones\\accept.png"));
    btnEntrar.setBounds(262, 166, 104, 23);
    btnEntrar.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            Logar();
        }
    });

    txtSenha = new JPasswordField();
    txtSenha.setBounds(224, 107, 179, 20);
    contentPane.add(txtSenha);
    contentPane.add(btnEntrar);

    lblLogin = new JLabel("LOGIN");
    lblLogin.setFont(new Font("Arial", Font.BOLD, 15));
    lblLogin.setBounds(262, 11, 67, 21);
    contentPane.add(lblLogin);

    lblSistemaDesenvolvidoPela = new JLabel("Sistema desenvolvido por Alesssandro Jacques.)");
    lblSistemaDesenvolvidoPela.setForeground(Color.BLACK);
    lblSistemaDesenvolvidoPela.setFont(new Font("SansSerif", Font.PLAIN, 10));
    lblSistemaDesenvolvidoPela.setBounds(233, 256, 391, 14);
    contentPane.add(lblSistemaDesenvolvidoPela);
    this.setLocationRelativeTo(null); // centralizando formulario
    con = conectaBD.conectabd();

    setResizable(false); //Bloquando a opção maximizar a tela de login
}
    @SuppressWarnings("deprecation")
    public void Logar() {
        String sql = "Select * from login where usuario = ? and senha = ?";
        try {
            pst = con.prepareStatement(sql);
            pst.setString(1, txtUsuario.getText());
            pst.setString(2, txtSenha.getText());

            rs = pst.executeQuery();

            if(rs.next()) {
                frmPrincipal frm = new frmPrincipal();
                frm.setVisible(true);
                dispose();
            }else {
                JOptionPane.showMessageDialog(null,"Usuario e senha inválidos.");
            }
        }
        catch(SQLException error) {
            JOptionPane.showMessageDialog(null, error);
        }
    }

} 


    //Form PRINCIPAL

    package visual;

    import java.awt.EventQueue; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.Connection;

    import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.EmptyBorder;

    public class frmPrincipal extends JFrame {

    ```
    private static final long serialVersionUID = 1L;
    private JPanel contentPane;
    private JTextField txtBusca;
    private JButton btnLimpar;
    private JButton btnSair;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            public void run() {
                try {
                    frmPrincipal frame = new frmPrincipal();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    Connection conectabd=null;

    /**
     * Create the frame.
     */
    public frmPrincipal() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 1124, 744);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblPesquisar = new JLabel("Pesquisar:");
        lblPesquisar.setBounds(50, 52, 85, 33);
        lblPesquisar.setFont(new Font("Tahoma", Font.PLAIN, 18));
        contentPane.add(lblPesquisar);

        txtBusca = new JTextField();
        txtBusca.setBounds(140, 62, 260, 23);
        txtBusca.setColumns(10);
        contentPane.add(txtBusca);
        //pesquisarUsuarios();

        JButton btnBuscar = new JButton("Buscar");
        btnBuscar.setBounds(410, 60, 108, 23);
        btnBuscar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {

            }
        });
        btnBuscar.setIcon(new ImageIcon("C:\\Users\\Alessandro\\Downloads\\icons8-pesquisar-filled-25.png"));
        contentPane.add(btnBuscar);

        btnLimpar = new JButton("Limpar ");
        btnLimpar.setIcon(new ImageIcon("C:\\Users\\Alessandro\\Downloads\\icons8-limpar-pesquisa-25.png"));
        btnLimpar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                txtBusca.setText(null);

            }
        });
        btnLimpar.setBounds(523, 107, 115, 23);
        contentPane.add(btnLimpar);

        btnSair = new JButton("SAIR");
        btnSair.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        btnSair.setBounds(410, 107, 108, 23);
        btnSair.setFont(new Font("Tahoma", Font.BOLD, 11));
        btnSair.setIcon(new ImageIcon("C:\\Users\\Alessandro\\Downloads\\icons8-fechar-janela-25.png"));
        contentPane.add(btnSair);

        this.setExtendedState(MAXIMIZED_BOTH); // utiliza para maximizar o formulário
        //setResizable(false); //Bloquando a opção maximizar

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE); //tirando a opção fechar o JFRAME

    }
    }

3 Respostas

smatt

Você pode criar um TableModel, passando um ArrayList como parâmetro. Esta ArrayList é preenchida com as informações coletadas la da sua query “select” que você faz no BD. Daí, por mandar esta ArrayList para o seu TableModel, ele ja renderizará sua tabela. Recomendo usar AbstractTableModel e não o DefaultTableModel :wink:

alessandro_jacques

Será que consigo fazer isso dentro do meu frmPrincipal, e você teria algum exemplo de como faz isso no eclipse?

smatt

Você cria uma classe interna, extendendo AbstractTableModel, daí você sobrescreve métodos que pertencem a esta interface.

Vou te dar um exemplo aqui, ai você edita de acordo com a sua tabela, certo?

private class SeuTableModel extends AbstractTableModel {

Dentro dela você cria o construtor: 

        private List<SuaClasse> suaList; 

 /* Aqui você edita tá bom? "SuaClasse" será a classe onde tem as variaveis correspondentes à esta tabela, onde tem os getters e setters entende? "suaList" você coloca o nome que bem entender, mas recomendo sempre usar nomes que façam sentido e nunca verbos (coisa que se coloca em nomes de métodos neh?)*/

        private final String[] colunas = {"Código", "Nome do Produto", "Quantidade", "Preço"};  // Nome das colunas

        public TableModel(List<SuaClasse> suaList) { // Contrutor, onde seu TableModel recebe uma list (esta list é a que contem os dados que serão renderizados na tabela em questão.)

            this.suaList = suaList; // A list criada aqui dentro recebe os dados da list que foi carregada em outro lugar, talvez em um BD ou na propria execução. Depende de cada aplicação, mas no seu caso seria vindo do BD msm.

        }


// Método responsável por determinar quantas linhas terá sua tabela, baseada na quantidade de linhas q tem sua List
@Override
        public int getRowCount() {
            return suaList.size(); //Edite isso aqui com o nome da List q vc criou aqui dentro do TableModel.
        }

//Classe responsável em determinar quantas colunas vai ter sua tabela, retornando quantos dados tem na Array com os nomes das colunas.
        @Override
        public int getColumnCount() {
            return colunas.length; // colunas eh a Array com os nomes das colunas, criada la em cima.
        }


//Este método é o que itera na ArrayList e vai preenchendo na tabela. Essencial este método!

        @Override
        public Object getValueAt(int lin, int col) {

// A quantidade de "cases" vai depender da quantidade de colunas q sua tabela tem, ok? No caso, sao 4, entao varia de 0 a 3.

            switch (col) {
                
                case 0:
                    return this.suaList.get(lin).getVariavel1(); // Aqui voce vai editando de acordo com o nome das variaveis que a List recebeu, entendido?

                case 1:
                    return this.suaList.get(lin).getVariavel2();

                case 2:
                    return this.suaList.get(lin).getVariável3();

                case 3:
                    return this.suaList.get(lin).getVariavel4();

                default:
                    return this.suaList.get(lin);
            
            }

        }

// Daqui pra baixo, so edite mesmo onde é necessário mas não precisa mexer no código.

        public List<SuaClasse> getDataSet() { 
            return suaList;
        }

        @Override
        public String getColumnName(int col) {
            return colunas[col];
        }

        public void clearRow() {
            suaList.clear();
            fireTableDataChanged();
        }
        
        
    }

Seu TableModel está pronto! Agora, basta instanciar sua tabela dessa forma: tabela.jTableView.setModel(new TableModel(dao.read()));

No caso, eu passo como parâmetro pro TableModel o método da minha classe DAO que faz o select no BD (visto que neste meu método eu retorno uma ArrayList que é preenchida com as informaçoes do BD). Vou te mostrar meu método dao. read() pra vc entender:

public List read() {

        PreparedStatement state;
        ResultSet rs;

        try {

            state = ConnectionFactory.getConnection().prepareStatement(SQLBUSCAR);
            rs = state.executeQuery();

            while (rs.next()) {
                ContaModel contasModel = new ContaModel(); 

                contasModel.setConta(rs.getInt(1));
                contasModel.setNome(rs.getString(2));
                contasModel.setSaldo(rs.getDouble(3));
                contasModel.setLimite(rs.getDouble(4));

                contasBD.add(contasModel); // Preenchendo a ArrayList
            }
           
            return contasBD; // Retornando a ArrayList, que é oq passo por parâmetro quando invoco a tabela com o TableModel.
            
        } catch (SQLException ex) {
            System.err.println("Erro: " + ex);
        }
        return null;

    }

Leia tudo com calma, se necessário, muitas vezes até. Está tudo bem explicandinho. Com este TableModel, basicamente vc renderiza de forma genérica qualquer tabela, bastando apenas adaptar os métodos do TableModel de acordo com sua necessidade. :wink:

Criado 18 de junho de 2019
Ultima resposta 18 de jun. de 2019
Respostas 3
Participantes 2