简体   繁体   中英

Why my JTable isn't showing?

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!

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();

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!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM