JCombobox + JTable

9 respostas
fabricioempresa

Bom pessoal dei uma pesquisada aqui no forum e no google e não consegui entender como eu coloco um JCombox dentro de uma JTable.

Eu uso a minha tabela da seguinte forma.

@Override
    public Class getColumnClass(int col) {
        switch (col) {
            case 0: //Address
                return String.class;
            case 1: //Description
                return String.class;
            case 2: //Correction(status)
                return String.class;
            case 3: //Data
                return String.class;
            case 4: //Ativar
                return Boolean.class;
            case 5: //Obs
                return String.class;
            default:
                return null;
        }
    }

    @Override
    public void setValueAt(Object value, int row, int col) {
        Sensor ss = (Sensor) datalist.get(row);
        switch (col) {
            case 0: //Address
                ss.setAddress(Integer.parseInt(value.toString()));
                break;
            case 1: //Description
                ss.setName(value.toString());
                break;
            case 2: //Divisor
                ss.getDatecalibrate();
            case 3: //Data
                ss.getDatecheck();
                break;
            case 4: //Ativar
                ss.isActive();
                break;
            case 5: //Obs
                ss.getDescription();
                break;
            default:
        }
    }

    @Override
    public String getColumnName(int col) {
        return columns[col];
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Sensor ss = (Sensor) datalist.get(rowIndex);
        switch (columnIndex) {
            case 0:
                return ss.getId();
            case 1:
                return ss.getName();
            case 2:
                if (ss.getDatecalibrate() == null) {
                    return "Não Calibrado";
                } else {
                    Date date1 = ss.getDatecalibrate();
                    return formatter.format(date1);
                }
            case 3:
                if (ss.getDatecheck() == null) {
                    return "Não Aferido";
                } else {
                    Date date2 = ss.getDatecheck();
                    return formatter.format(date2);
                }

            case 4:
                if (ss.isActive() == true) {
                    return true;
                } else {
                    return false;
                }
            case 5:
                return ss.getDescription();
            default:
                return null;
        }
    }

Desde já agradeço a atenção de todos que responderem.

9 Respostas

ViniGodoy

O seu setValueAt tem que setar o valor. Vai funcionar exatamente igual aos demais campos:

@Override public void setValueAt(Object value, int row, int col) { Sensor ss = (Sensor) datalist.get(row); switch (col) { case 0: //Address ss.setAddress(Integer.parseInt(value.toString())); break; case 1: //Description ss.setName(value.toString()); break; case 2: //Divisor ss.getDatecalibrate(); case 3: //Data ss.getDatecheck(); break; case 4: //Ativar ss.setActive((Boolean)value); break; case 5: //Obs ss.setDescription(value.toString()); break; default: } }

Reveja esses gets no setValueAt. Geralmente aí só tem sets.

fabricioempresa

Não testei ainda esse código.Mas ele não retornaria um Checkbox dessa maneira?

Obriago pela resposta

Marky.Vasconcelos

O que faz aparecer um Checkbox é o return Boolean.class; no getColumnClass.

Nos sets voce deveria colocar os valores no objeto(Conforme ViniGodoy disse).

E no tópico voce disse JCombobox, por isso não respondi antes.

fabricioempresa

Sim o que eu quero que apareça é um Combobox

Agora entendi a diferença.

Depois eu uso esse código e posto minhas dúvidas valeu mesmo.

fabricioempresa

Bom pessoal fiz as alterações só que ele começou a mostrar um checkbox ao inves de um combobox.

segue o código com as minhas mudanças.

@Override
    public void setValueAt(Object value, int row, int col) {
        Sensor ss = (Sensor) datalist.get(row);
        switch (col) {
            case 0: //Address
                ss.setAddress(Integer.parseInt(value.toString()));
                break;
            case 1: //Description
                ss.setName(value.toString());
                break;
            case 2: //Divisor
                ss.setDatecalibrate(value.toString());
            case 3: //Data
                ss.setDatecheck(value.toString());
                break;
            case 4: //Ativar
                ss.isActive();
                break;
            case 5: //Obs
                ss.setDescription(value.toString());
                break;
            case 6: //Obs
                ss.setActive((Boolean)value);
                break;
            default:
        }
    }

    @Override
    public String getColumnName(int col) {
        return columns[col];
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Sensor ss = (Sensor) datalist.get(rowIndex);
        switch (columnIndex) {
            case 0:
                return ss.getId();
            case 1:
                return ss.getName();
            case 2:
                if (ss.getDatecalibrate() == null) {
                    return "Não Calibrado";
                } else {
                    Date date1 = ss.getDatecalibrate();
                    return formatter.format(date1);
                }
            case 3:
                if (ss.getDatecheck() == null) {
                    return "Não Aferido";
                } else {
                    Date date2 = ss.getDatecheck();
                    return formatter.format(date2);
                }

            case 4:
                if (ss.isActive() == true) {
                    return true;
                } else {
                    return false;
                }
            case 5:
                return ss.getDescription();
            
            case 6:
                return ss.getDescription();
            default:
                return null;
        }
    }

Obrigado pela atenção.

Marky.Vasconcelos

Marky.Vasconcelos:
O que faz aparecer um Checkbox é o return Boolean.class; no getColumnClass.

Nos sets voce deveria colocar os valores no objeto(Conforme ViniGodoy disse).

E no tópico voce disse JCombobox, por isso não respondi antes.


Novamente. Boolean.class mostra um Checkbox e não um ComboBox, para mostrar um ComboBox seria bem mais complicado.

Mas a dica é, retorne JComboBox.class no getColumnClass, e coloque um CellRenderer para isso na sua JTable.

ViniGodoy

Não é mais fácil aparecer um CheckBox mesmo?

Para aparecer o combo, você terá que criar um TableCellEditor.

fabricioempresa

È que com um checkbox não daria?

Mas to dando mais uma olhada aqui no forum e achei em outro tópico uma coisa parecida,inclusive com comentários seus.

http://www.guj.com.br/posts/list/144100.java

fabricioempresa

Bom não consegui encontrar.

Porém agora vou ser mais específico.

Nesse código que que eu retorno

@Override
    public Class getColumnClass(int col) {
        switch (col) {
            case 0: //Address
                return String.class;
            case 1: //Description
                return String.class;
            case 2: //Correction(status)
                return String.class;
            case 3: //Data
                return String.class;
            case 4: //Ativar
                return Boolean.class;
            case 5: //Obs
                return String.class;
            case 6:
                // o que que eu retorno
               // Boolean.class
              // Object.class
            default:
                return null;
        } 
    }

E aqui

@Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Sensor ss = (Sensor) datalist.get(rowIndex);
        switch (columnIndex) {
            case 0:
                return ss.getId();
            case 1:
                return ss.getName();
            case 2:
                if (ss.getDatecalibrate() == null) {
                    return "Não Calibrado";
                } else {
                    Date date1 = ss.getDatecalibrate();
                    return formatter.format(date1);
                }
            case 3:
                if (ss.getDatecheck() == null) {
                    return "Não Aferido";
                } else {
                    Date date2 = ss.getDatecheck();
                    return formatter.format(date2);
                }

            case 4:
                if (ss.isActive() == true) {
                    return true;
                } else {
                    return false;
                }
            case 5:
                return ss.getDescription();
            case 6:
                // que que eu retorno aqui??
            default:
                return null;
        }
    }

Acho que tendo essas dúvidas resolvidas posso dar um passa a mais

Valeu obrigado pela atenção.

Criado 23 de agosto de 2010
Ultima resposta 24 de ago. de 2010
Respostas 9
Participantes 3