JTable Personalizado

2 respostas
I

Olá pessoal gostaria de possa me ajudar. Como faço para criar um JTable personalizado, com cada coluna um dado diferente.
por ex: numérico, Date… ?

2 Respostas

LeonardoSoaresConrad

VocÊ terá que criar o seu próprio TableModel. Da pra ter uma boa noção de como começar com esse tutorial.

http://www.guj.com.br/articles/147

I

to tentando usar este exemplo, mas adicionei um metodo para add as colunas
so que não esta funcionando…

public class SimpleTableModel extends AbstractTableModel
{
    private ArrayList linhas = null;
    private String[] colunas = null;
    private boolean[] colsEdicao;

    public SimpleTableModel(ArrayList linhas, String[] colunas, boolean[] edicao) {
        setLinhas(linhas);
        setColunas(colunas);
        this.colsEdicao = edicao;
    }
    
    public SimpleTableModel( boolean[] edicao) {
        this.colsEdicao = edicao;
    }
    
    public String[] getColunas(){
        return colunas;
    }
    
    public ArrayList getLinhas(){
        return linhas;
    }

    public void setLinhas(ArrayList linhas) {
        this.linhas = linhas;
    }

    public void setColunas(String[] colunas) {
        this.colunas = colunas;
    }
    
    
    @Override
    public int getRowCount()
    {
        return getLinhas().size();
    }

    @Override
    public int getColumnCount() 
    {
        return getColunas().length;
//        int tamanho = 0;
//        for (int i = 0; i < getColunas().length; i++){
//            tamanho = tamanho + 1;
//        }
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex)
    {
        //Obtem a linha, que é uma String[]
        String[] linha = (String[])getLinhas().get(rowIndex);
        return linha[columnIndex]; //--> retorna o objeto que esta na coluna
    }
    
    @Override
    public boolean isCellEditable(int row, int col){
        return colsEdicao[col];
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        //Obtem a linha, que é uma String[]
        String[] linha = (String[])getLinhas().get(rowIndex);
        //Altera o conteudo no indice da coluna passada
        linha[columnIndex] = (String)aValue;
        //dispara o eveno da celula alterada
        fireTableCellUpdated(rowIndex, columnIndex);
    }

    public void addRow(String[] dadosLinha){
        getLinhas().add(dadosLinha);
        //Informa ao JTable de que houve linhas incluidas no modelo 
        //Como adicionamos no final, pegamos o tamanho total do modelo menos
        //1 para obter a linha incluida
        int linha = getLinhas().size()-1;
        fireTableCellUpdated(linha, linha);
    }
    
    public void addListlinha(List linhaDado){
        getLinhas().add(linhaDado);
        int linha = getLinhas().size()-1;
        fireTableCellUpdated(linha, linha);
    }
    
    public void addColumn(String[] nomeColunas){
        setColunas(colunas);
    }
    
    public void removeRow(int row){
        getLinhas().remove(0);
        //Informa ao JTable que houve dados deletados passando a linha removida
        fireTableCellUpdated(row, row);
    }
    
    //remove a linha pelo valor da coluna informada
    public boolean removeRow(String val, int col){
        //obtem o iterator
        Iterator i = getLinhas().iterator();
        int linha = 0;
        //Faz um looping em cima das linhas
        while (i.hasNext()){
            //Obtem as colunas da linha atual
            String[] linhaCorrente = (String[])i.next();
            linha++;
            //compara o conteúdo String da linha atual na coluna desejada
            //com o valor informado
            if (linhaCorrente[col].equals(linha)){
                getLinhas().remove(linha);
                //informa ao JTable que houve dados deletados passando a linha removida
                fireTableCellUpdated(linha, linha);
                return true;
            }
        }
        //Não encontrou nada
        return false;
    }
    
    //Retorna o nome da coluna
    @Override
    public String getColumnName(int col){
        return getColunas()[col];
    }
    
    
    public JTable createJTable()
    {
        ArrayList dados = new ArrayList();
        String[] colunas = new String[]{"Estado", "Cidade"};
        
        boolean[] edicao = {false, true};
        
        //Alimenta as linhas de dados
        dados.add(new String[]{"SP", "São 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"});
        
         SimpleTableModel modelo = new SimpleTableModel(dados, colunas, edicao);  
        JTable jtable = new JTable(modelo);  
        jtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);  

        return jtable;  
    }
    
}
Criado 26 de junho de 2013
Ultima resposta 28 de jun. de 2013
Respostas 2
Participantes 2