Cade o Cabecalho da jTable?

3 respostas
G

ola a todos !!!

estive estudando esse http://www.guj.com.br/article.show.logic?id=147 e fiz umas adaptacoeszinhas, mas o cabecalho da Tabela nao esta aparecendo…

alguem poderia ajudar o q esta errado ?

package TestTable;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.AbstractTableModel;

public class TestTable2 extends AbstractTableModel{

    private String [] aHeader = null;
    private ArrayList aCols = null;

    public String[]  getaHeader() {return aHeader;}
    public ArrayList getaCols()  {return aCols;}

    public void setaHeader(String[] strings) {aHeader = strings;}
    public void setaCols(ArrayList list) {aCols = list;}

    private boolean [] colsEdicao;

    JTable oTable;


    public TestTable2() {
        JFrame oFrame = new JFrame();

        Dimension oScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
        oFrame.setSize(oScreenSize.width,oScreenSize.height-20);

        oFrame.setTitle("Teste de Table2.");
        oFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        oFrame.setResizable(false);

        JFrame.setDefaultLookAndFeelDecorated(true);

        oFrame.getContentPane().setLayout(null);


        oTable = createJTable();

        /*
        String[] aHeaders = new String[] { "Estado", "Cidade" }; // sem alterçao
        // linha adicionada apos a criação das aHeader
        boolean [] edicao = {false, true};

        // Alterar chamada de criação do modelo
        SimpleTableModel modelo = new SimpleTableModel(aCols, aHeaders, edicao);
        // para enviar as propriedades de edicao das aHeader
        */



        oTable.setBounds(100,50,500,400);
        oFrame.getContentPane().add(oTable);


        oFrame.setVisible(true);

    }

    public JTable createJTable() { // Cria a JTable
        String[] colunas = new String[] { "Estado", "Cidade" };
        ArrayList dados = new ArrayList();
        // Alimenta as aCols de dados
        dados.add( new String[] { "SP", "Santo Paulo"         } ) ;
        dados.add( new String[] { "RJ", "Rio de Janeiro"      } ) ;
        dados.add( new String[] { "RN", "Rio Grande do Norte" } ) ;
        dados.add( new String[] { "ES", "Espirito Santo"      } ) ;
        boolean Edit [] = {false, true};
        TestTable2 modelo = new TestTable2( dados, colunas, Edit );
        JTable jtable = new JTable(modelo);
        jtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        return jtable;
    }

    public TestTable2(ArrayList dados, String[] aHeader, boolean [] edicao){
        setaHeader(aHeader);
        setaCols(dados);
        colsEdicao = edicao;
    }

    @Override
    public boolean isCellEditable(int row, int col){
        return colsEdicao[col];
    }

    @Override
    public String getColumnName(int col){ // Retorna o nome da coluna.
        return getaHeader()[col];
    }

    public int getColumnCount() { // Retorna o numero de aHeader no modelo
        return getaHeader().length;
    }

    public int getRowCount() { // Retorna o numero de aCols existentes no modelo
        return getaCols().size();
    }

    public Object getValueAt(int rowIndex, int columnIndex) { // Obtem o valor na linha e coluna
        String [] linha = (String [])getaCols().get(rowIndex);   // Obtem a linha, que é uma String []
        return linha[columnIndex];   // Retorna o objeto que esta na coluna
    }

    @Override
    public void setValueAt(Object value, int row, int col){ // Seta o valor na linha e coluna
        String [] linha = (String [])getaCols().get(row);   // Obtem a linha, que é uma String []
        linha[col] = (String)value;   // Altera o conteudo no indice da coluna passado
        fireTableCellUpdated(row,col);   // dispara o evento de celula alterada
    }


    public void addRow( String [] dadosLinha){
        getaCols().add(dadosLinha);
        // Informa a jtable de que houve aCols incluidas no modelo
        // COmo adicionamos no final, pegamos o tamanho total do modelo
        // menos 1 para obter a linha incluida.
        int linha = getaCols().size()-1;
        fireTableRowsInserted(linha,linha);
        return;
    }

    public void removeRow(int row){
        getaCols().remove(0);
        // informa a jtable que houve dados deletados passando a
        // linha reovida
        fireTableRowsDeleted(row,row);
    }


    public boolean removeRow(String val, int col){ // Remove a linha pelo valor da coluna informada
        // obtem o iterator
        Iterator i = getaCols().iterator();
        int linha = 0;
        // Faz um looping em cima das aCols
        while(i.hasNext()){
            // Obtem as aHeader da linha atual
            String[] linhaCorrente = (String[])i.next();
            linha++;
            // compara o conteudo String da linha atual na coluna desejada
            // com o valor informado
            if( linhaCorrente[col].equals(val) ){
                getaCols().remove(linha);
                // informa a jtable que houve dados deletados passando a
                // linha removida
                fireTableRowsDeleted(linha,linha);
                return true;
            }
        }
        // Nao encontrou nada
        return false;
    }

    public static void main(String args[])  {
        new TestTable2();
    }

}

obrigado !!!

3 Respostas

ViniGodoy

Coloque sua JTable sobre um JScrollPane:

oFrame.getContentPane().add(new JScrollPane(oTable));
G

nao eh estranho, ter q colocar um JScrollPane pro cabecalho aparecer ???

nao entendi essa…

o JScrollPane nao eh pra rolagem ???

obrigado !!!

ViniGodoy

Tenho que concordar. É estranho sim.

Mas é assim que funciona…

Criado 27 de agosto de 2009
Ultima resposta 27 de ago. de 2009
Respostas 3
Participantes 2