Conteúdo da Linha da JTable apaga quando clico em outra célula

Boa tarde Amigos,

Sei que deve ser coisa boba, mas to desde ontem com esse problema. Eu criei uma JTable e apliquei nela um ColumnModel, um TableModel e um CellEditor onde coloco um JCombox em algumas colunas, tudo funciona bem, eu consigo selecionar a opção do comboBox que eu quero, mas quando clico em outra célula ele muda o combo da que cliquei primeiro para o index 0, alguém sabe como posso solucionar isso?

Abçs

Marcelo Logan

Posta seu TableModel e o CellEditor do ComboBox.

Bom dia Galera,

Segue a baixo o meu Model

[code]public class DiarioClasseTableModel extends AbstractTableModel {

ArrayList<Aluno> vAlunos;

public DiarioClasseTableModel(ArrayList<Aluno> vAlunos) {
    this.vAlunos = vAlunos;
}

public int getRowCount() {
    return vAlunos.size();
}

public int getColumnCount() {
    return vAlunos.get(0).getvAula().size() + 1;
}

public Object getValueAt(int rowIndex, int columnIndex) {

    Aluno umAluno = vAlunos.get(rowIndex);
    switch(columnIndex){
        case 0: return umAluno.getNome();
    }
    return null;
}

@Override
public boolean isCellEditable(int row, int col) {

    if (col == 0) { // Quais colunas eu não quero deixar editar
        return false;
    } else {
        return true;
    }
}

}[/code]

e o meu CellEditor

[code]public class DiarioClasseCellEditor extends AbstractCellEditor implements TableCellRenderer, TableCellEditor, ActionListener {

JTable table;
JComboBox renderJcb;
JComboBox editJcb;
String text;
Aula aula;

public DiarioClasseCellEditor(JTable table, int column, Aula aula) {
    this.table = table;
    String[] values = new String[]{"", "2 Presenças", "2 Faltas", "1 Presença e 1Falta"};
    editJcb = new JComboBox(values);
    renderJcb = new JComboBox(values);
    editJcb.setFocusable(false);
    editJcb.addActionListener(this);
    this.aula = aula;
    TableColumnModel tableColumn = table.getColumnModel();
    tableColumn.getColumn(column).setCellRenderer(this);
    tableColumn.getColumn(column).setCellEditor(this);

}

public Object getCellEditorValue() {
    return text;
}

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    if (hasFocus) {
        renderJcb.setForeground(table.getForeground());
        renderJcb.setBackground(UIManager.getColor("Button.background"));
    } else if (isSelected) {
        renderJcb.setForeground(table.getSelectionForeground());
        renderJcb.setBackground(table.getSelectionBackground());
    } else {
        renderJcb.setForeground(table.getForeground());
        renderJcb.setBackground(UIManager.getColor("Button.background"));
    }

    renderJcb.addItem((value == null) ? "" : value.toString());
    return renderJcb;
}

public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
    text = (value == null) ? "" : value.toString();
    editJcb.addItem(text);
    return editJcb;
}

public void actionPerformed(ActionEvent e) {
    int coluna = table.getSelectedColumn();
    int index = editJcb.getSelectedIndex();
    AulaDao dao = new AulaDao();
    if (index == 1) {
        aula.setPresenca(2);
        aula.setFalta(0);
    } else if (index == 2) {
        aula.setPresenca(0);
        aula.setFalta(2);
    } else if (index == 3) {
        aula.setPresenca(1);
        aula.setFalta(1);
    } else {
        aula.setPresenca(0);
        aula.setFalta(0);
    }
    dao.upDateAula(aula.getIdAula(), aula);

}

}[/code]

Abçs

Marcelo Logan

estou com este problema tbm…
alguém manja ?

Posta seu TableModel e o CellEditor do ComboBox.

Obs: não uso comboBox.

TableModel:



package Objetos;

import java.util.List;
import javax.swing.table.AbstractTableModel;


public class TableModelOrdemServicoIncluir  extends AbstractTableModel {

    private static final int ColDescr = 0;
    private static final int ColIniM = 1;
    private static final int ColFimM = 2;
    private static final int ColIniT = 3;
    private static final int ColFimT = 4;
    private static final int ColHoraViagem = 5;
    private static final int ColValor = 6;
    private static final int ColTotal = 7;

    private List<OrdemServico> ordens;

    public TableModelOrdemServicoIncluir(final List<OrdemServico> ordens) {
         this.ordens = ordens;

     }

    public void setOrdens(List<OrdemServico> ordens) {
        this.ordens = ordens;
        fireTableDataChanged();
    }

    public TableModelOrdemServicoIncluir() {
    }

    public int getRowCount() {
        return 10;
    }

    public int getColumnCount() {
        return 8;
    }

    @Override
     public String getColumnName(final int col){
        switch (col){
            case ColDescr:
                return "Descrição";

            case ColIniM:
                return "Início Manhã";

            case ColFimM:
                return "Fim Manhã";

            case ColIniT:
                return "Início Tarde";

            case ColFimT:
                return "Fim Tarde";

            case ColHoraViagem:
                return "Hora/Viagem";

            case ColValor:
                return "Valor";

            case ColTotal:
                return "Total Serviço";

            default:
                return "";
        }

     }

    public Object getValueAt(int rowIndex, int columnIndex) {
        
        if (ordens != null && rowIndex >= 0 && rowIndex < ordens.size()){

            OrdemServico os = ordens.get(rowIndex);

            switch(columnIndex){

                case 0:
                    return os.getId();

                case 1:
                    return os.getDataEmissao();

                case 2:
                    return os.getDataVencimento();

                case 3:
                    return os.getCodigoCliente();

                case 4:
                    return os.getTotal();

                case 5:
                    return os.getCodigoStatus();
            }
        }
        return null;
   }

    @Override
    public boolean isCellEditable(int row, int col){

        if(col == 7){
            return false;

        }else{
            return true;
        }
    }

}

Ao rodar minha View e digitar o conteúdo em uma determinada célula e dar um TAB ou mudar de célula, o conteúdo é apagado automaticamente.

Cade o setValueAt?

Bom…pelo menos já sei onde pequei…
Poderias me ajudar na implementação deste método ??

obrigado.

Alguém ??

[quote=lucas_duzo]Bom…pelo menos já sei onde pequei…
Poderias me ajudar na implementação deste método ??

obrigado.[/quote]

Tá aqui um código q creio q irá te ajudar…

[code]public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
OrdemServico os = ordens.get(rowIndex);

        switch(columnIndex){  

            case 0:  
                return os.setId((Long) aValue);  break; //coloquei long mas não sei como vc colocou 

            case 1:  
                return os.setDataEmissao((Date) aValue); break; //java.util.Date  

            case 2:  
                return os.setDataVencimento((Date) aValue); break; //java.util.Date  

            case 3:  
                return os.setCodigoCliente((Long) aValue);  break; //mesmo caso do setId 

            case 4:  
                return os.setTotal(Double.parseDouble((String) aValue)); //aqui vc é q sabe tbm, se é double, float ou bigdecimal  

            case 5:  
                return os.setCodigoStatus(Integer.parseInt((String) aValue)); //Acredito eu q seja integer :)  
        }          

    fireTableCellUpdated(rowIndex, columnIndex);
}[/code]

qualquer dúvida é só falar…

Então, neste caso, minha lista ordens está com valores nulos, ou melhor, vazia.

neste método setValueAt, preciso pegar os valores digitados na tabela e atribuir nesta lista ordens, pois assim o meu método getValueAt irá verificar que a lista não está nula e irá adicionar e/ou fixar os dados digitados nesta tabela…

Alguma sugestão ?

obrigado.

pois é cara, deu certo…

fiz do jeito que tú falaste e retirei as condições que possuo no método getValueAt que ficou assim:

 public Object getValueAt(int rowIndex, int columnIndex) {

            switch(columnIndex){

                case 0:
                    return os.getDescricaoOrdemServico();

// e assim a diante

obrigado