1

伙计们,我的 JTable 有问题,我的 JTable(tblLivro) 的内容应该是我的查询(工作)的结果(ArrayList),但是当我尝试将 rsult 放入我的 jtable 时,它​​不起作用,它没有'不显示任何错误,但不显示它。为什么?

这是我的代码

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

谢谢!

4

3 回答 3

3

首先,stop using null layouts. Swing 旨在与布局管理器一起使用。

您将表格添加到滚动窗格中,这是一件好事。

scrollPane.setViewportView(tblLivros);

后来看起来您更新了模型(这是一件好事),但随后您将表格添加到另一个面板(这是一件坏事)。这将从滚动窗格中删除表格。除非表格显示在滚动窗格中,否则表格将不再有标题。您需要做的就是调用该setModel()方法,表格将自动重新绘制。

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

如果您确实需要将组件添加到可见的 GUI,那么代码应该是:

panel.add(..)
panel.revalidate();
panel.repaint();
于 2013-05-19T03:33:12.047 回答
3

因为你甚至没有JScrollPane在你的painelPrincipal. 你可以这样做:

painelPrincipal.add(scrollPane, BorderLayout.SOUTH);

还:

  • 在添加所有组件之前不要调用setVisibleJFrame
  • 调用pack而不是setSizeJFrame
  • 避免使用空布局和绝对定位。

问候和祝你好运!

编辑:

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

好的,这是你的代码。尽管我不得不删除一些代码以使其正常工作。

于 2013-05-19T01:18:04.230 回答
0

刚从朋友那里得到帮助,这是最终代码:

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

非常感谢你的帮助!

于 2013-05-20T01:17:59.290 回答