[JTable] - Ajuda! =/

11 respostas
vcs.vinicius

Galera.
Boa Tarde.

Estou fazendo um tela para cadastro, no final da tela vai ter um JTable com todos os registro da tabela, passa para ele poder consultar os ue já foi cadastro ou apenas para poder atualizar!!
Porém quando vc cria um Jtable, por default fica um tamanho grande para umas 20 linhas, mais quero mostra apenas 8 linhas, se houver mais crie uma barra de rolagem, andei por varios topicos e links e nada encontrei que pode-se me ajudar!!

Cheguei a usar um “new Dimension()”, porém meu JTextField ficou grande!!!

Vou postar o código da Jtable!!

Preciso disso com um pouco de urgência é um projeto que tenho que entregar semana que vem!!

Me ajude.

Desde de já obrigado!!

Att.
Vinícius Rodrigues

JTRegistro = new JTable();
        JTRegistro.setPreferredScrollableViewportSize(new Dimension(500, 70));
        JTRegistro.setModel(new DefaultTableModel( new Object [][] { {null, null, null, null},{null, null, null, null},{null, null, null, null},{null, null, null, null},{null, null, null, null} },new String [] { "ID", "Nome", "Descrição" }));
        JTRegistro.getColumnModel().getColumn(0).setPreferredWidth(30);
        JTRegistro.getColumnModel().getColumn(0).setResizable(false);
        JTRegistro.getColumnModel().getColumn(1).setPreferredWidth(150);
        JTRegistro.getColumnModel().getColumn(1).setResizable(true);
        JTRegistro.getColumnModel().getColumn(2).setPreferredWidth(250);
        JTRegistro.getColumnModel().getColumn(2).setResizable(true);
        JTRegistro.setRowHeight(14);
        //Scroll Tabela Registro
        JScrollPane rolagemTabela = new JScrollPane();
        rolagemTabela.setViewportView(JTRegistro);

Lembrando só quero diminuir o tamanho para umas 8 linhas

11 Respostas

Marky.Vasconcelos

Primeiro passo, NÃO use DefaultTableModel.

Siga os links da minha assinatura e entenda como funciona a JTable e como os dados vão parar nela através do Model, vai te poupar muito trabalho e dor de cabeça que usar o Default vai te causar.

Eder_Peixoto

E diminuindo a altura (height) da tabela, não serve?

LarissaNepomuceno

Vinicius, quando você carregar a tabela usa um while pra excluir as linhas existentes, e depois disso você só insere a quantidade de linhas que você vai utilizar…

while (Tabela.getRowCount() > 0) {
            ModeloTabela.removeRow(0);
        }

:wink:

vcs.vinicius

Marky,
Boa Tarde!!

Fiz exatamente como você falou!
Porém a lista eu alimento com dados de uma tabela.
Quando vou passa pelo instancia, ele fala que é Obj, sendo que tenho que enviar um int e duas String.

Como faço para passa esse valores???

ArrayList<RegistroDescricao> lista = new ArrayList<RegistroDescricao>();
        try {

        ResultSet rS = bancoDados.statement.executeQuery("SELECT * FROM tb_tipo_descricao");

        while (rS.next()) {
            lista.add(new RegistroDescricao(rS.getObject(1), rS.getObject(2), rS.getObject(3)));
        }
        } catch (SQLException eSQL) {
            JOptionPane.showMessageDialog(null, "Erro de SQL\n Menssagem: " + eSQL.getMessage(), "Erro de SQL", JOptionPane.ERROR_MESSAGE);
        } catch (Exception excep) {
            JOptionPane.showMessageDialog(null, "Erro de SQL\n Menssagem: " + excep.getMessage(), "Erro de SQL", JOptionPane.ERROR_MESSAGE);

        }
        jRTMRegistro = new RegistroTabelModel(lista);
        jTRegistro = new JTable();
        jTRegistro.setModel(jRTMRegistro);
        jSPRegistro = new JScrollPane();
        jSPRegistro.setViewportView(jTRegistro);

Agradeço sua ajuda desde já!!

Marky.Vasconcelos

Posta seu TableModel que podemos te ajudar mais.

vcs.vinicius

Segue o código:

package helpit;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.swing.JDialog;
import javax.swing.table.AbstractTableModel;

/**
 * @author Vinicius Rodrigues Pereira
 */
public class RegistroTabelModel extends AbstractTableModel {

    //constantes que vão representar as colunas
    //(só para facilitar o entendimento do código)
    private final int COL_NOME = 0;
    private final int COL_DESC = 1;
    //lista dos produtos que serão exibidos
    private List<RegistroDescricao> registro;

    public RegistroTabelModel() {
        registro = new ArrayList<RegistroDescricao>();
    }

    public RegistroTabelModel(List<RegistroDescricao> lista) {
        this();
        registro.addAll(lista);
    }

    public int getRowCount() {
        //quantidade de linhas
        //cada produto na lista será uma linha
        return registro.size();
    }

    public int getColumnCount() {
        //quantidade de colunas
        //vamos exibir só Nome e Quantidade, então são 2 colunas
        return 2;
    }

    @Override
    public String getColumnName(int column) {
        //qual o nome da coluna
        if (column == COL_NOME) {
            return "Nome";
        } else if (column == COL_DESC) {
            return "Descrição";
        }
        return "";
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        //retorna a classe que representa a coluna
        if (columnIndex == COL_NOME) {
            return String.class;
        } else if (columnIndex == COL_DESC) {
            return String.class;
        }
        return String.class;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        //pega o produto da linha
        RegistroDescricao rD = registro.get(rowIndex);

        //verifica qual valor deve ser retornado
        if (columnIndex == COL_NOME) {
            return rD.getNome();
        } else if (columnIndex == COL_DESC) {
            return rD.getDescricao();
        }
        return "";
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        //a célula vai ser editável?
        //no nosso caso todas vão ser editáveis, entao retorna true pra td
        return true;
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        //pega o produto da linha
        RegistroDescricao rD = registro.get(rowIndex);

        //verifica qual valor vai ser alterado
        if (columnIndex == COL_NOME) {
            rD.setNome(aValue.toString());
        } else if (columnIndex == COL_DESC) {
            rD.setDescricao(aValue.toString());
        }

        //avisa que os dados mudaram
        fireTableDataChanged();
    }

    //-----------------------------------------------------
    //Métodos personalizados
    //-----------------------------------------------------
    public void inserir(RegistroDescricao p) {
        registro.add(p);

        fireTableDataChanged();
    }

    public void excluir(int pos) {
        registro.remove(pos);

        fireTableDataChanged();
    }

    public void excluir(RegistroDescricao p) {
        registro.remove(p);

        fireTableDataChanged();
    }

    public void ordenarPorNome() {
        //ordena pelo nome
        Collections.sort(registro, new Comparator<RegistroDescricao>() {

            public int compare(RegistroDescricao o1, RegistroDescricao o2) {
                return o1.getNome().compareTo(o2.getNome());
            }
        });

        //avisa que a tabela foi alterada
        fireTableDataChanged();
    }

    public void ordenarPorDescricao() {
        //ordena pelo nome
        Collections.sort(registro, new Comparator<RegistroDescricao>() {

            public int compare(RegistroDescricao o1, RegistroDescricao o2) {
                return o1.getDescricao().compareTo(o2.getDescricao());
            }
        });

        //avisa que a tabela foi alterada
        fireTableDataChanged();
    }

    public void misturar() {
        //mistura a lista
        Collections.shuffle(registro);

        //avisa que a tabela foi alterada
        fireTableDataChanged();
    }

    public RegistroDescricao getCliente(int pos) {
        if (pos >= registro.size()) {
            return null;
        }

        return registro.get(pos);
    }
}
Marky.Vasconcelos

Qual o problema que nao entendi?

Aparentemente é isso mesmo.

Posta a linha de codigo que indica o erro e se tiver StackTrace, poste-a também.

vcs.vinicius

Marky,

Consegui resolver esse problema, obrigado!!!

Mas agora preciso da sua ajuda, mais não erro de código!!
Quando vc cria um ArrayList, vc passa um Código!! como chamo esse código conforme o registro que eu escolhi.

Pois preciso fazer um Update da linha selecionada, porém preciso fazer a condição pelo ID, por quê o nome e descrição vai ser alterado!!

Obrigado

vcs.vinicius

Aee Galera!!!
Consegui!!!

Vi que não estava conseguindo pensar, parei para minha mente “descansar”.
Assisti um seriado(SuperNatural), e ao voltar em um passe de magica, a solução veio a minha cabeça!!!
hahaha

Obrigado pelo ajuda de todos!!!

;DD

Marky.Vasconcelos

Os objetos já estão na lista, voce só precisa popula-los com o ID também, mesmo que não exiba isso na tabela.

Boa champz!

Marky.Vasconcelos

Só uma observação, a imagem da sua assinatura é muito grande.

Criado 27 de outubro de 2010
Ultima resposta 29 de out. de 2010
Respostas 11
Participantes 4