Question

Guys I have a problem with my JTable, my JTable(tblLivro) which contents should be the result(ArrayList) of my query (working) , but when I try to put the rsult in my jtable it just doesn't work, it doesn't show any errors, yet not show it. Why?

Here is my code

package view;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import model.Livro;
import control.LivroControl;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;

public class LivroView extends JFrame implements ActionListener {

    private static final long serialVersionUID = 1L;
    private JLabel lblIdLivro, lblLombada, lblTitulo, lblTituloInternacional, lblEdicao, lblEditora, lblAutor ; 
    private JTextField txtIdLivro, txtTombo, txtTitulo, txtTituloInternacional, txtEdicao, txtEditora, txtAutor;
    private JButton btnAdicionar, btnPesquisar, btnExcluir;
    private JPanel painelPrincipal, painelGeral, painelBotoes, painelJPanel;
    private JTable tblLivros;
    private List<Livro> encontrados;

    DefaultTableModel modelo;

    public LivroView() {
        super("Manutenção de Livros");

        encontrados = new ArrayList<Livro>();
        lblIdLivro = new JLabel("Código do livro:");
        lblLombada = new JLabel("Tombo:");
        lblTitulo = new JLabel("Título:");
        lblTituloInternacional = new JLabel("Título Internacional:");
        lblEdicao = new JLabel("Edição:");
        lblEditora = new JLabel("Editora:");
        lblAutor = new JLabel("Autor:");


        txtIdLivro = new JTextField(20);
        txtTombo= new JTextField("Tombo");
        txtTitulo = new JTextField(20);
        txtTituloInternacional= new JTextField(20);
        txtEdicao = new JTextField(20);
        txtEditora= new JTextField(20);
        txtAutor= new JTextField("Autor");

        txtIdLivro.setText("");
        txtTombo.setText("");
        txtTitulo.setText("");
        txtTituloInternacional.setText("");
        txtEdicao.setText("");
        txtEditora.setText("");
        txtAutor.setText("");

        btnAdicionar = new JButton("Adicionar");
        btnExcluir = new JButton("Excluir");
        btnPesquisar = new JButton("Pesquisar");

        btnAdicionar.addActionListener(this);
        btnPesquisar.addActionListener(this);
        btnExcluir.addActionListener(this);

        painelPrincipal = new JPanel();
        painelGeral = new JPanel();
        painelBotoes = new JPanel();
        painelJPanel = new JPanel();


        painelPrincipal.setLayout(new BorderLayout());
        painelGeral.setLayout(new GridLayout(7,2));
        painelBotoes.setLayout(new GridLayout(2,1));

        painelGeral.add(lblIdLivro);
        painelGeral.add(txtIdLivro);
        painelGeral.add(lblLombada);
        painelGeral.add(txtTombo);
        painelGeral.add(lblTitulo);
        painelGeral.add(txtTitulo);
        painelGeral.add(lblTituloInternacional);
        painelGeral.add(txtTituloInternacional);
        painelGeral.add(lblEdicao);
        painelGeral.add(txtEdicao);
        painelGeral.add(lblEditora);
        painelGeral.add(txtEditora);
        painelGeral.add(lblAutor);
        painelGeral.add(txtAutor);

        painelBotoes.add(btnAdicionar);
        painelBotoes.add(btnPesquisar);
        painelBotoes.add(btnExcluir);



        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(55, 80, 359, 235);
        painelJPanel.add(scrollPane);

        tblLivros = new JTable();


        tblLivros.setModel(new DefaultTableModel(
            new Object[][] {
            },
            new String[] {
                "Tombo", "T\u00EDtulo", "T\u00EDtulo Internacional", "Edi\u00E7\u00E3o", "Autor", "Editora"
            }
        ));
        modelo = new DefaultTableModel();
        tblLivros.getColumnModel().getColumn(0).setPreferredWidth(54);
        tblLivros.getColumnModel().getColumn(1).setPreferredWidth(104);
        tblLivros.getColumnModel().getColumn(2).setPreferredWidth(136);
        tblLivros.getColumnModel().getColumn(4).setPreferredWidth(102);
    //  modelo =  (DefaultTableModel) tblLivros.getModel();

        scrollPane.setViewportView(tblLivros);

        painelJPanel.setLayout(null);
        painelPrincipal.add(painelGeral, BorderLayout.NORTH);
        painelPrincipal.add(painelBotoes, BorderLayout.CENTER);



        this.setSize(500,300);
        this.setVisible(true);
        this.setContentPane(painelPrincipal);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }



    @Override
    public void actionPerformed(ActionEvent e) {

        String cmd = e.getActionCommand();
        LivroControl control = new LivroControl();
        if ("Adicionar".equalsIgnoreCase(cmd)){
            boolean adicionado = false;
            adicionado = control.adicionarLivro(txtIdLivro.getText(), txtTitulo.getText(), txtTituloInternacional.getText(), txtTombo.getText(), txtAutor.getText(), txtEdicao.getText(), txtEditora.getText());
            if (adicionado == true){
                txtIdLivro.setText("");
                txtTombo.setText("");
                txtTitulo.setText("");
                txtTituloInternacional.setText("");
                txtEdicao.setText("");
                txtEditora.setText("");
                txtAutor.setText("");
                txtIdLivro.requestFocus();
            }

        }
        else if("Excluir".equalsIgnoreCase(cmd)){
            control.excluirLivro(txtTombo.getText());
            txtTombo.setText("");
        }
        else if("Pesquisar".equalsIgnoreCase(cmd)){
            if (!txtTombo.getText().equals("")){
                Livro l = control.pesquisarLivroPorTombo(txtTombo.getText());
                if (l!=null){
                    txtIdLivro.setText(String.valueOf(l.getIdLivro()));
                    txtTombo.setText(l.getTombo());
                    txtTitulo.setText(l.getTitulo());
                    txtTituloInternacional.setText(l.getTituloInternacional());
                    txtEdicao.setText(l.getEdicao());
                    txtEditora.setText(l.getEditora());
                    txtAutor.setText(l.getAutor());

                }
            }
            else if (!txtAutor.getText().equals("")){
                encontrados = control.pesquisarLivroPorAutor(txtAutor.getText());

                if (encontrados!= null){
                    for (Livro dados : encontrados){
                        Object[] objetoTombo = new Object[1];
                        Object[] objetoTitulo = new Object[2];
                        Object[] objetoTituloInternacional = new Object[3];
                        Object[] objetoEdicao = new Object[4];
                        Object[] objetoAutor = new Object[5];
                        Object[] objetoEditora = new Object[6];

                        objetoTombo[0] = dados.getTombo();
                        objetoTitulo[0] = dados.getTitulo();
                        objetoTituloInternacional[0] = dados.getTituloInternacional();
                        objetoEdicao[0] = dados.getEdicao();
                        objetoAutor[0]= dados.getAutor();
                        objetoEditora[0]= dados.getEditora();

                        //modelo.setNumRows(0);

                        modelo.addRow(objetoTombo);
                        modelo.addRow(objetoTitulo);
                        modelo.addRow(objetoTituloInternacional);
                        modelo.addRow(objetoEdicao);
                        modelo.addRow(objetoAutor);
                        modelo.addRow(objetoEditora);

                    }
                    this.setSize(700,500);
                    tblLivros.setModel(modelo);
                    painelJPanel.add(tblLivros);
                    painelJPanel.setVisible(true);
                    painelJPanel.repaint();
                    painelPrincipal.add(painelJPanel, BorderLayout.SOUTH);
                    painelPrincipal.repaint();
                }
            }
            else {
                encontrados = control.pesquisarLivroPorNome(txtTitulo.getText());
                if (encontrados!= null){

                }
            }

        }
    }
    public static void main(String[] args) {
        new LivroView();
    }
}

Thank you!

Was it helpful?

Solution 3

just got help from a friend, here is the final code:

public class LivroView extends JFrame implements ActionListener {

    private JTable tblLivros;
    DefaultTableModel modeloTabela;
    private List<Livro> encontrados;

    public LivroView() {
        super("Manutenção de Livros");

        encontrados = new ArrayList<Livro>();


        modeloTabela = new DefaultTableModel(
            new String[] {
                "Tombo", "Título", "Título Internacional", "Edição", "Autor", "Editora"
            }, 0);


        tblLivros = new JTable(modeloTabela);
        tblLivros.getColumnModel().getColumn(0).setPreferredWidth(54);
        tblLivros.getColumnModel().getColumn(1).setPreferredWidth(104);
        tblLivros.getColumnModel().getColumn(2).setPreferredWidth(136);
        tblLivros.getColumnModel().getColumn(4).setPreferredWidth(102);

        painelTabela = new JScrollPane(tblLivros);
        painelTabela.setVisible(false);

        painelPrincipal.add(painelGeral, BorderLayout.NORTH);
        painelPrincipal.add(painelBotoes, BorderLayout.CENTER);
        painelPrincipal.add(painelTabela, BorderLayout.SOUTH);


        //this.setSize(500,300);
        this.setContentPane(painelPrincipal);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.pack();

        this.setLocationRelativeTo(null);
        this.setVisible(true);

    }



    @Override
    public void actionPerformed(ActionEvent e) {

        String cmd = e.getActionCommand();
        LivroControl control = new LivroControl();
        if ("Adicionar".equalsIgnoreCase(cmd)){


        }
        else if("Excluir".equalsIgnoreCase(cmd)){

        }
        else if("Pesquisar".equalsIgnoreCase(cmd)){
            if (!txtTombo.getText().equals("")){
                Livro l = control.pesquisarLivroPorTombo(txtTombo.getText());
                if (l!=null){
                    txtIdLivro.setText(String.valueOf(l.getIdLivro()));
                    txtTombo.setText(l.getTombo());
                    txtTitulo.setText(l.getTitulo());
                    txtTituloInternacional.setText(l.getTituloInternacional());
                    txtEdicao.setText(l.getEdicao());
                    txtEditora.setText(l.getEditora());
                    txtAutor.setText(l.getAutor());

                }
            }
            else if (!txtAutor.getText().equals("")){
                encontrados = control.pesquisarLivroPorAutor(txtAutor.getText());

                if (encontrados!= null){
                    for (Livro dados : encontrados){

                        Object[] row = new Object[6];

                        row[0] = dados.getTombo();
                        row[1] = dados.getTitulo();
                        row[2] = dados.getTituloInternacional();
                        row[3] = dados.getEdicao();
                        row[4]= dados.getAutor();
                        row[5]= dados.getEditora();

                        modeloTabela.addRow(row);


                    }

                    painelTabela.setVisible(true);

                    painelPrincipal.repaint();
                    this.pack();
                }
            }
            else {
                //the same
            }

        }
    }
    public static void main(String[] args) {
        new LivroView();
    }
}

Thank you so much for the help!

OTHER TIPS

Because you didn't even added JScrollPane on your painelPrincipal. You can do it like this:

painelPrincipal.add(scrollPane, BorderLayout.SOUTH);

Also:

  • Do not call setVisible for JFrame before all components are added.
  • Call pack instead of setSize for JFrame
  • Avoid using null layout and absolute positioning.

Regards and good luck!

EDIT:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class LivroView extends JFrame implements ActionListener {

    private static final long serialVersionUID = 1L;
    private JLabel lblIdLivro, lblLombada, lblTitulo, lblTituloInternacional, lblEdicao, lblEditora, lblAutor ;
    private JTextField txtIdLivro, txtTombo, txtTitulo, txtTituloInternacional, txtEdicao, txtEditora, txtAutor;
    private JButton btnAdicionar, btnPesquisar, btnExcluir;
    private JPanel painelPrincipal, painelGeral, painelBotoes, painelJPanel;
    private JTable tblLivros;

    DefaultTableModel modelo;

    public LivroView() {
        super("Manutenção de Livros");

        lblIdLivro = new JLabel("Código do livro:");
        lblLombada = new JLabel("Tombo:");
        lblTitulo = new JLabel("Título:");
        lblTituloInternacional = new JLabel("Título Internacional:");
        lblEdicao = new JLabel("Edição:");
        lblEditora = new JLabel("Editora:");
        lblAutor = new JLabel("Autor:");


        txtIdLivro = new JTextField(20);
        txtTombo= new JTextField("Tombo");
        txtTitulo = new JTextField(20);
        txtTituloInternacional= new JTextField(20);
        txtEdicao = new JTextField(20);
        txtEditora= new JTextField(20);
        txtAutor= new JTextField("Autor");

        txtIdLivro.setText("");
        txtTombo.setText("");
        txtTitulo.setText("");
        txtTituloInternacional.setText("");
        txtEdicao.setText("");
        txtEditora.setText("");
        txtAutor.setText("");

        btnAdicionar = new JButton("Adicionar");
        btnExcluir = new JButton("Excluir");
        btnPesquisar = new JButton("Pesquisar");

        btnAdicionar.addActionListener(this);
        btnPesquisar.addActionListener(this);
        btnExcluir.addActionListener(this);

        painelPrincipal = new JPanel();
        painelGeral = new JPanel();
        painelBotoes = new JPanel();
        painelJPanel = new JPanel();


        painelPrincipal.setLayout(new BorderLayout());
        painelGeral.setLayout(new GridLayout(7,2));
        painelBotoes.setLayout(new GridLayout(2,1));

        painelGeral.add(lblIdLivro);
        painelGeral.add(txtIdLivro);
        painelGeral.add(lblLombada);
        painelGeral.add(txtTombo);
        painelGeral.add(lblTitulo);
        painelGeral.add(txtTitulo);
        painelGeral.add(lblTituloInternacional);
        painelGeral.add(txtTituloInternacional);
        painelGeral.add(lblEdicao);
        painelGeral.add(txtEdicao);
        painelGeral.add(lblEditora);
        painelGeral.add(txtEditora);
        painelGeral.add(lblAutor);
        painelGeral.add(txtAutor);

        painelBotoes.add(btnAdicionar);
        painelBotoes.add(btnPesquisar);
        painelBotoes.add(btnExcluir);

        tblLivros = new JTable();

        tblLivros.setModel(new DefaultTableModel(
                new Object[][] {
                },
                new String[] {
                        "Tombo", "T\u00EDtulo", "T\u00EDtulo Internacional", "Edi\u00E7\u00E3o", "Autor", "Editora"
                }
        ));
        JScrollPane scrollPane = new JScrollPane(tblLivros);

        painelPrincipal.add(painelGeral, BorderLayout.NORTH);
        painelPrincipal.add(painelBotoes, BorderLayout.CENTER);
        painelPrincipal.add(scrollPane, BorderLayout.SOUTH);

        this.setContentPane(painelPrincipal);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.pack();
        this.setVisible(true);
    }


    @Override
    public void actionPerformed(ActionEvent e) {

        String cmd = e.getActionCommand();
        if ("Adicionar".equalsIgnoreCase(cmd)){
            boolean adicionado = false;
            if (adicionado == true){
                txtIdLivro.setText("");
                txtTombo.setText("");
                txtTitulo.setText("");
                txtTituloInternacional.setText("");
                txtEdicao.setText("");
                txtEditora.setText("");
                txtAutor.setText("");
                txtIdLivro.requestFocus();
            }

        }
        else if("Excluir".equalsIgnoreCase(cmd)){
            txtTombo.setText("");
        }
        else if("Pesquisar".equalsIgnoreCase(cmd)){
            if (!txtTombo.getText().equals("")){

            }
            else if (!txtAutor.getText().equals("")){


        } }
    }
    public static void main(String[] args) {
        new LivroView();
    }
}

Ok, here is your code. Altough I had to remove some pieces of code to make it functional.

First of all, stop using null layouts. Swing was designed to be used with layout managers.

You add the table to the scroll pane which is a good thing.

scrollPane.setViewportView(tblLivros);

Later on it looks like you update the model (which is a good thing), but then you add the table to another panel (which is a bad thing). This removes the table from the scrollpane. The table will no longer have a header unless the table is displayed in a scrollpane. All you need to do is invoke the setModel() method and the table will automatically repaint itself.

tblLivros.setModel(modelo);
//painelJPanel.add(tblLivros);
//painelJPanel.setVisible(true);
//painelJPanel.repaint();
//painelPrincipal.add(painelJPanel, BorderLayout.SOUTH);

If you ever do need to add a component to a visible GUI then the code should be:

panel.add(..)
panel.revalidate();
panel.repaint();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top