2013-05-19 2 views
1

Ребята У меня проблема с моей JTable, моей JTable (tblLivro), содержимое которой должно быть результатом (ArrayList) моего запроса (работает), но когда я пытаюсь поместить rsult в мою jtable, это просто не работает, он не показывает никаких ошибок, но не показывает его. Зачем?Почему мой 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(); 
    } 
} 

Спасибо!

+0

чувак обрезать ваш код, чтобы мы могли видеть соответствующие части, no1s будет читать все это –

ответ

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

Большое вам спасибо за помощь!

3

Потому что вы даже не добавили JScrollPane на свой painelPrincipal. Вы можете сделать это следующим образом:

painelPrincipal.add(scrollPane, BorderLayout.SOUTH); 

также:

  • Не называйте setVisible для JFrame перед добавлением всех компонентов.
  • Звоните pack вместо setSize для JFrame
  • Избегайте использования нулевого расположения и абсолютного позиционирования.

С уважением и удачи!

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

Хорошо, вот ваш код. Хотя мне пришлось удалить некоторые фрагменты кода, чтобы сделать его функциональным.

+0

Большое спасибо за ответ, но я попытался изменить то, что вы сказали, ничего не изменилось, я также попытался просто удалить JScrollPane, чтобы узнать, Я делал с ней что-то не так (я не знаю, было ли это opitional, поэтому я просто это сделал), а также не покажу его ... – migmig

+0

Я обновлю свой функциональный код. –

+0

Пока не показываю ... Думаю, я делаю что-то действительно глупое, но я действительно не могу понять, что ... – migmig

3

Прежде всего, stop using null layouts. Swing был разработан для использования с менеджерами компоновки.

Вы добавляете стол в область прокрутки, что является хорошей вещью.

scrollPane.setViewportView(tblLivros); 

Позже он выглядит, как вы обновите модель (которая является хорошей вещью), но затем добавить таблицу в другую панель (что плохо). Это удаляет таблицу из scrollpane. В таблице больше нет заголовка, если таблица не будет отображаться в scrollpane. Все, что вам нужно сделать, это вызвать метод setModel(), и таблица автоматически перекрасит себя.

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

Если вы когда-нибудь нужно добавить компонент видимым GUI, то код должен быть:

panel.add(..) 
panel.revalidate(); 
panel.repaint(); 
Смежные вопросы