简体   繁体   English

为什么我的JTable不显示?

[英]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. 伙计们,我的JTable有问题,我的JTable(tblLivro)的内容应该是查询(工作)的结果(ArrayList),但是当我尝试将结果放入我的jtable中时,它根本不起作用,没有显示任何错误,但没有显示。 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 . 因为您甚至没有在painelPrincipal上添加JScrollPane You can do it like this: 您可以这样做:

painelPrincipal.add(scrollPane, BorderLayout.SOUTH);

Also: 也:

  • Do not call setVisible for JFrame before all components are added. 在添加所有组件之前,请勿为JFrame调用setVisible
  • Call pack instead of setSize for JFrame 调用pack而不是JFrame的setSize
  • 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 . 首先, stop using null layouts Swing was designed to be used with layout managers. Swing旨在与布局管理器一起使用。

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. 您需要做的就是调用setModel()方法,该表将自动重新绘制自身。

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: 如果确实需要将组件添加到可见的GUI,则代码应为:

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! 非常感谢你的帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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