JTable não aparece no JScrollPane

7 respostas
I

Boas.

Estou com um problema. Tenho um JPanel, um JScrollPane e uma JTable. Quando eu adiciono a JTable no JScrollPane, e o JScrollPane no JPanel, não aparece nada. Aí se eu dou um setPreferredSize no JScrollPane, a JTable aparece, mas o scroll nao funcionar.

this.pan.add(new JScrollPane(tblPeca), c);


public void keyTyped(KeyEvent e)
        {
            PecaDao pecaDao = DaoFactory.getPeca();
            
            List<Peca> pecaList = pecaDao.pesquisar(txtCod.getText(), "codigo");
            PecaTableModel pecaModel = new PecaTableModel();
            pecaModel.adicionarLista(pecaList);

                tblPeca.setModel(pecaModel);

7 Respostas

dyeimys
Não sei bem se vou responder sua divida, mais fiz aqui a um exemplo mutio simples e você verifica ai...
tabela(){
        super("");
        fundo = new JPanel();
        tabela = new JTable(300, 200);
        rola = new JScrollPane(tabela);

        tela = getContentPane();
        
        tela.add(fundo);
        fundo.add(rola);
       
        
        setDefaultCloseOperation(3);
        setSize(300,300);
        setLocationRelativeTo(null);
        setVisible(true);
    }
Se eu nao postei relacionado ao que voce tinha duvidas, desculpe... Mas está ai!
I

Acho que eu nao expliquei direito.

Olha, eu tenho um JFrame. Estou usando GridBagLayout. Tenho um JPanel. Esse JPanel possui outros componentes. Eu adiciono o JPanel no JFrame. Agora eu tenho uma JTable, e um JScrollPane. Quando eu coloco o JScrollPane no JPane, e o JTable no JScrollPane, muitas vezes ele nao aparece e até deforma o layout, deixando componentes muito grandes ou muito pequenos.

Consegui resolver usando o setPreferredSize do JScrollPane, mas aí a barra de rolagem não funciona pra JTable.

Dyeimys, mesmo assim obrigado pela atenção.

Ivan_Alves

Mostre seu código completo pelo menos na parte da construção desses componentes

I
//tblPeca
        c.gridx = 0;
        c.gridy = 0;
        c.weightx = 0;
        c.weighty = 0;
        c.ipadx = 0;
        c.ipady = 0;
        c.gridwidth = 1;
        c.gridheight = 1;
        c.insets = new Insets(0,10,0,0);
        c.anchor = GridBagConstraints.LINE_START;
        JScrollPane scrPeca = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrPeca.setViewportView(this.tblPeca);
        tblPeca.setPreferredSize(new Dimension(320, 100));
        this.panPeca.add(scrPeca, c);
        //tblPeca

PecaTableModel

package tables;

import javax.swing.table.*;
import java.util.*;
import reposicaodepecas.*;

public class PecaTableModel extends AbstractTableModel
{    
    private List<Peca> peca;
    
    public PecaTableModel()
    {
        this.peca = new ArrayList<Peca>();
    }
    
    public PecaTableModel(List<Peca> peca)
    {
        this();
        this.peca.addAll(peca);
    }

    public void adicionarLista(List<Peca> peca)
    {
        int i = this.peca.size();
        this.peca.addAll(peca);
        fireTableRowsInserted(i, i + peca.size());
    }
}
Ivan_Alves

O código não ajudou muito mas tenta usar o setPreferredSize na sua JTable que está dentro do JScrollPane.

I

Desculpa, mas é que esse é o código mesmo =/

De qualquer forma, eu dou o set preferred size no JTable, fora do JScrollPane tudo beleza, mas dentro do JScrollPane deforma toda minha GUI e ainda por cima nao aparece nada…

Ivan_Alves

Iskifi:
Desculpa, mas é que esse é o código mesmo =/

De qualquer forma, eu dou o set preferred size no JTable, fora do JScrollPane tudo beleza, mas dentro do JScrollPane deforma toda minha GUI e ainda por cima nao aparece nada…

Falei do código funcionando tipo com os objetos declarados e a classe main de qualquer forma fiz um pequeno exemplo aqui que funcionou beleza não sei se é o mesmo caso mas você pode analisar o que fiz

Na linha 60 onde redimensiono o meu panel que está dentro de um JScrollPane

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

/**
 *
 * @author IVAN
 */
public class TesteAbrirImagem extends JFrame{

    JButton buttonAbrirImagem;

    public static void main(String [] args){
        new TesteAbrirImagem().go();
    }

    public void go(){

        buttonAbrirImagem = new JButton("Abrir Imagem");

        buttonAbrirImagem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                procurarImagem();
            }
        });

        this.add(buttonAbrirImagem);

        this.setSize(200,150);
        this.setVisible(true);
    }

    public void procurarImagem(){
        JFileChooser file = new JFileChooser();
        if (JFileChooser.APPROVE_OPTION == file.showOpenDialog(this)) {
            abrirImagem(file.getSelectedFile().toString());
        }
    }

    private void abrirImagem(String caminho){
        ImageIcon imagem = new ImageIcon(caminho);
        if (imagem.getIconWidth() > 0 && imagem.getIconHeight() > 0) {
            JDialog dialog = new JDialog();
            JPanel panel = new JPanel();
            //desenhar imagem na label
            JLabel labelImg = new JLabel();
            labelImg.setIcon(imagem);

            //adicionar barra de rolagem ao JPanel
            JScrollPane scrollImg = new JScrollPane(panel);
            //perceba que eu redimensiono o panel de acordo com o tamanho da imagem para mostrar as barras de rolagem
            panel.setPreferredSize(new Dimension(imagem.getIconWidth(), imagem.getIconHeight()));

            panel.add(labelImg);
            dialog.add(scrollImg);

            dialog.setModal(true);
            dialog.setSize(350, 350);
            dialog.setLocationRelativeTo(null);
            dialog.setVisible(true);
        } else {
            JOptionPane.showMessageDialog(null, "Selecione uma imagem válida para ser visualizada", "INFORMAÇÃO", JOptionPane.INFORMATION_MESSAGE);
        }
    }

}
Criado 28 de julho de 2011
Ultima resposta 2 de ago. de 2011
Respostas 7
Participantes 3