put name in the columns from a vector of objects

0
public class TableModelAgendamento extends AbstractTableModel {

int contador = 1;
int qtdFuncionario;
private TOFuncionario[] func = new TOFuncionario[qtdFuncionario];
String coluna[] = new String[qtdFuncionario];
private List<TOItemAgendamento> dados = new ArrayList();
Date hora;
SimpleDateFormat sddf = new SimpleDateFormat("HH:mm:ss");
TOItemAgendamento itemAgenda;
TOItemAgendamento itemAgendamento;

public TableModelAgendamento(TOFuncionario[] funcionario) {
    TOItemAgendamento recebeFunc;
    TOFuncionario funcio;
    qtdFuncionario = funcionario.length;
    this.func = funcionario;
    for (int i = 1; i < funcionario.length; i++) {
        recebeFunc = new TOItemAgendamento();
        funcio = new TOFuncionario();
        funcio = func[i];
        recebeFunc.getFuncionario().setNome(funcio.getNome());
    }
    zeraTabela();
}

public void zeraTabela() {
    try {
        Date data = sddf.parse("06:30:00");
        Calendar horaInicial = Calendar.getInstance();
        horaInicial.setTime(data);
        data = sddf.parse("21:00:00");
        Calendar horaFinal = Calendar.getInstance();
        horaFinal.setTime(data);
        while (horaInicial.before(horaFinal)) {
            itemAgenda = new TOItemAgendamento();
            String horai = sddf.format(horaInicial.getTime());
            horaInicial.add(Calendar.MINUTE, 30);
            itemAgenda.setHoraMinuto(horai);
            itemAgenda.getFuncionario().setNome("");
            adicionaLinha(itemAgenda);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void limpar() {
    dados = new ArrayList();
    fireTableDataChanged();
}

public void setDados(List<TOItemAgendamento> dados) {
    this.dados = dados;
    fireTableDataChanged();
}

public List<TOItemAgendamento> getDados() {
    return dados;
}

public void adicionaLinha(TOItemAgendamento iagendamento) {
    dados.add(iagendamento);
    fireTableDataChanged();
}

public void removeLinha(int linha) {
    dados.remove(linha);
    fireTableDataChanged();
}

@Override
public String getColumnName(int coluna) {
    TOFuncionario funcio;
    for (int i = 1; i < func.length; i++) {
        funcio = new TOFuncionario();
        funcio = func[i];
        return funcio.getNome();
    }
    return null;
}

@Override
public int getRowCount() {
    return dados.size();
}

public TOItemAgendamento getItemCompra(int linha) {
    return dados.get(linha);
}

@Override
public int getColumnCount() {
    return func.length;
}

@Override
public Object getValueAt(int linha, int coluna) {
    TOItemAgendamento itemAgendamento = dados.get(linha);
    int i = 1;
        for(int cont = 0; cont <= qtdFuncionario; cont++){
            System.out.println("get valueat ");
            switch (coluna) {
            case 0:
                return dados.get(linha).getHoraMinuto();
            case Integer.SIZE:
                return dados.get(linha).getHoraMinuto();
            }
    }
    return null;

}

@Override
public void setValueAt(Object valor, int linha, int coluna) {
    TOItemAgendamento itemAgendamento = dados.get(linha);
    switch (coluna) {
        case 0:
            break;
        case 1:
            dados.get(linha).getFuncionario().setNome((String) valor);
            break;
        case 2:
            dados.get(linha).getFuncionario().setNome((String) valor);
            break;
        case 3:
            dados.get(linha).getFuncionario().setNome((String) valor);
            break;
        default:
            JOptionPane.showMessageDialog(null, "Erro no TableModelItemCompra, coluna não esperada em setValueAt.");
    }
    fireTableDataChanged();
}
    
asked by anonymous 19.09.2015 / 02:55

1 answer

2

First, make sure your table has autoCreateColumnsFromModel set to true . Otherwise, it will ignore the getColumnCount and getColumnName functions you created.

Second, its function getColumnName is always returning the second element in the list:

@Override
public String getColumnName(int coluna) {
    TOFuncionario funcio;
    for (int i = 1; i < func.length; i++) { // Começa pelo segundo (índice 1)
        funcio = new TOFuncionario();       // Cria um novo objeto (?!)
        funcio = func[i];                   // Pega o objeto do array
        return funcio.getNome();            // Retorna seu nome
    }
    return null;
}

Instead, get the correct element (which should have the same% as coluna ) and return its name:

@Override
public String getColumnName(int coluna) {
    return func[coluna].getNome();
}

Take a look at the rest of your code, in the constructor for example you are also counting elements from the second (index 1 ) instead of starting with the first one (index 0 ) - and there you also create an object and then throw it away ...

Finally, if your func field is changed dynamically (and not just in the constructor, as appears to be the case), remember to call fireTableStructureChanged for the table to auto-update when employees change (in this case, how are you using the employee's name as the column name, if this value changes it is necessary to call this method so that the table does not continue with the old name).

    
19.09.2015 / 13:42