Jtable

tenho uma jtable e usei o código:

    DefaultTableModel model = new DefaultTableModel();

    public void criarModelo() {
        model = new DefaultTableModel();
        tblQuantidade.setModel(model);
        model.addColumn("nome");
        model.addColumn("unidade");
        model.addColumn("quantidade");
        model.addColumn("meta");
    }

    public final void adicionarItem(String[] itensLista) {
        //adicionar uma nova linha a uma tabela
        //primeiro

        String[] dados = {itensLista[0], itensLista[1], itensLista[2], itensLista[3]};

        if (tblQuantidade.getRowCount() > 0 && tblQuantidade.getModel().getValueAt(0, 0) == (null)) {
            model.setRowCount(0);
        }
        model.addRow(dados);
        System.out.println("foi");
        tblQuantidade.setRowHeight(itensLista.length);
    }

Mas a tabela está com um fundo branco no qual nao carrega todas as linhas da tabela apesar delas estarem la. Tentei usar o serRowHeight mas fica varias linha bem pequenas num espaçinho alguém poderia me ajudar com isso?

Adicione a JTable a um JScrollPane.

Não use o DefaultTableModel ele só é útil para conteúdo estático, sem contar que é desperdício de processamento ficar fazendo laços para adicionar itens no DefaulTableModel.

Implemente seu próprio TableModel estendendo a classe AbstractTableModel e faça ele renderizar sua coleção de objetos.

Recomendo se basear no GenericAbstractTableModel que o colega @lucas_camara postou neste tópico.

3 curtidas

eu posso criar uma jTable estendendo AbstractTableModel ou preciso de duas classes?

São coisas distintas.
JTable é o componente visual.
TableModel é a interface que serve para alimentar a JTable.
Você utiliza ambos em conjunto.

1 curtida