TableModel mudando nome das colunas

2 respostas
michetti

Então galera preciso que uma tabela seja montada de acordo com que eu precisar..

Pois tipo assim eu estou fazendo um sisteminha onde uso vários tipos de tabelas, porém o AbstractTableModel que tem aqui no GUJ que eu vi é assim

Porém eu preciso que esta parte seja preenchida de acordo com a tabela que eu quiser.
/* Array de Strings com o nome das colunas. */  
    private String[] colunas = new String[]{  
        "Código","Data","Hora", "Cliente", "Serviço","Telefone","Endereço","Preço"};

pensei em colocar váriaveis no lugar porém tem esta parte do get e set..

Oque eu poderia fazer para solucionar o meu problema? rsrs Atualmente estou usando a minha tabela principal com AbstractTableModel e as outras com DefaultTableModel =/

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package View;

import Controller.Controlador;
import Model.Agendamento;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author Michetti
 */
public class TableModel extends AbstractTableModel{
    private static final long serialVersionUID = 1L;  
  
    /* Lista de Cliente que representam as linhas. */  
    private List<Agendamento> linhas = new Controlador().listarAgendamentos();
  
    /* Array de Strings com o nome das colunas. */  
    private String[] colunas = new String[]{  
        "Código","Data","Hora", "Cliente", "Serviço","Telefone","Endereço","Preço"};  
  
  
  
    /* Cria um ClienteTableModel vazio. */  
    public TableModel() {  
        linhas = new Controlador().listarAgendamentos();  
    }  
  
    /* Cria um ClienteTableModel carregado com 
     * a lista de Cliente especificada. */  
    public TableModel(List<Agendamento> listaDeAgendamentos) {  
        linhas = new Controlador().listarAgendamentos();  
    }  
  
  
    /* Retorna a quantidade de colunas. */  
    @Override  
    public int getColumnCount() {  
        // Está retornando o tamanho do array "colunas".  
        return colunas.length;  
    }  
  
    /* Retorna a quantidade de linhas. */  
    @Override  
    public int getRowCount() {  
        // Retorna o tamanho da lista de Cliente.  
        return linhas.size();  
    }  
  
  
    @Override  
    public String getColumnName(int columnIndex) {  
        // Retorna o conteúdo do Array que possui o nome das colunas  
        return colunas[columnIndex];  
    }  
  
    ;  
  
    @Override  
    public Class<?> getColumnClass(int columnIndex) {  
        return String.class;  
    }  
  
    ;  
  
  
    @Override  
    public Object getValueAt(int rowIndex, int columnIndex) {  
           Agendamento ag = linhas.get(rowIndex);  
  
        // Retorna o campo referente a coluna especificada.  
        // Aqui é feito um switch para verificar qual é a coluna  
        // e retornar o campo adequado. As colunas sãoas mesmas  
        // que foram especificadas no array "colunas".  
        switch (columnIndex) {  
  
            // Seguindo o exemplo: "Tipo","Data de Cadastro", "Nome", "Idade"};  
            case 0: 
                return ag.getCodigo();
            case 1:  
                return ag.getData();  
            case 2:  
                return ag.getHorario();  
            case 3:  
                return ag.getNome();  
            case 4:
                return ag.getServico();
            case 5:
                return ag.getTelefone();
            case 6:
                return ag.getEndereco();
            case 7:
                return ag.getValor();
            default:  
                // Isto não deveria acontecer...  
                throw new IndexOutOfBoundsException("columnIndex out of bounds");  
        }  
    }  
  
@Override  
//modifica na linha e coluna especificada  
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {  
      Agendamento ag = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado  
  
     switch (columnIndex) { // Seta o valor do campo respectivo  
         case 0:
             ag.setCodigo(Integer.parseInt(aValue.toString()));
         case 1:  
             ag.setData(aValue.toString());  
         case 2:  
             ag.setHorario(aValue.toString());  
         case 3:  
             ag.setNome(aValue.toString());  
         case 4:
             ag.setServico(aValue.toString());
         case 5:
             ag.setTelefone(aValue.toString());
         case 6:
             ag.setEndereco(aValue.toString());
         case 7:
             ag.setValor(aValue.toString());
  
         default:  
             // Isto não deveria acontecer...               
     }  
     fireTableCellUpdated(rowIndex, columnIndex);  
     }  
  
    //modifica na linha especificada  
    public void setValueAt(Agendamento aValue, int rowIndex) {  
        Agendamento ag = linhas.get(rowIndex); // Carrega o item da linha que deve ser modificado  
  
        ag.setCodigo(aValue.getCodigo());
        ag.setData(aValue.getData());  
        ag.setHorario(aValue.getHorario());  
        ag.setNome(aValue.getNome());  
        ag.setServico(aValue.getServico());
        ag.setTelefone(aValue.getTelefone());
        ag.setEndereco(aValue.getEndereco());
        ag.setValor(aValue.getValor());
  
        fireTableCellUpdated(rowIndex, 0);  
        fireTableCellUpdated(rowIndex, 1);  
        fireTableCellUpdated(rowIndex, 2);  
        fireTableCellUpdated(rowIndex, 3);
        fireTableCellUpdated(rowIndex, 4);
        fireTableCellUpdated(rowIndex, 5);
        fireTableCellUpdated(rowIndex, 6);
        fireTableCellUpdated(rowIndex, 7);
  
    }  
    ;  
  
  
    ;  
  
  
    @Override  
    public boolean isCellEditable(int rowIndex, int columnIndex) {  
        return false;  
    }  
  
  
    public Agendamento getCliente(int indiceLinha) {  
        return linhas.get(indiceLinha);  
    }  
  
  
  
    /* Adiciona um registro. */  
    public void addCliente(Agendamento m) {  
        // Adiciona o registro.  
        linhas.add(m);  
  
  
        int ultimoIndice = getRowCount() - 1;  
  
        fireTableRowsInserted(ultimoIndice, ultimoIndice);  
    }  
  
    /* Remove a linha especificada. */  
    public void removeCliente(int indiceLinha) {  
        JOptionPane.showMessageDialog(null, linhas);
        linhas.remove(indiceLinha);  
  
        fireTableRowsDeleted(indiceLinha, indiceLinha);  
    }  
  
    /* Adiciona uma lista de Cliente ao final dos registros. */  
    public void addListaDeCliente(List<Agendamento> ag) {  
        // Pega o tamanho antigo da tabela.  
        int tamanhoAntigo = getRowCount();  
  
        // Adiciona os registros.  
        linhas.addAll(ag);  
  
        fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);  
    }  
  
    /* Remove todos os registros. */  
    public void limpar() {  
        linhas.clear();  
  
  
        fireTableDataChanged();  
    }  
  
    /* Verifica se este table model esta vazio. */  
    public boolean isEmpty() {  
        return linhas.isEmpty();  
    }  
    
}

2 Respostas

ViniGodoy

Nada impede você de usar uma lista ou qualquer outra estrutura de dados que queira para o nome das colunas. O importante é apenas retornar o nome certo no método getColumnName. Mas o ideal é montar um model mesmo para cada tabela. Se quiser algo genérico, dê uma olhada no ObjectTableModel do Towel:

michetti

Pensei que fazendo uma TableModel para cada tabela seria uma solução erradíssima rsrs
Mas já que você que é expert :stuck_out_tongue: disse, vou fazer uma para cada pois ficará até mais organizado minhas tabelas.

Criado 28 de novembro de 2013
Ultima resposta 29 de nov. de 2013
Respostas 2
Participantes 2