[RESOLVIDO]CheckBOx + Jtable

4 respostas
fabricioempresa

Bom pessoal!Minha duvida e o seguinte

usei esse tutorial http://java.sun.com/docs/books/tutorial/uiswing/components/table.html da sun e consegui implementar um chech so que não
estou conseguindo fazer ele ser editável.Alguém poderia me ajudar?

Segue o código.

private ArrayList datalist = new ArrayList();
    private String[] columns = {"Bico", "Identificação", "Calibração","Data","Ativar","Obs"};

    public SensorTableModel() {
    }

    public SensorTableModel(List l) {
        datalist.addAll(l);
    }

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

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

    @Override
    public boolean isCellEditable(int row, int col) {
        switch (col) {
            case 0: //Address
                return false;
            case 1: //Description
                return true;
            case 2: //Status
                return false;
            case 3: //Datevent
                return false;
             case 4: //Datevent
                return true;
              case 5: //Datevent
                return false;
            default:
                return false;
        }
    }

    @Override
    public Class getColumnClass(int col) {
        switch (col) {
            case 0: //Address
                return Long.class;
            case 1: //Description
                return String.class;
            case 2: //Correction
                return String.class;
            case 3: //Correction
                return String.class;
            case 4:
                return Boolean.class;
            case 5:
                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.setDescription(value.toString());
                break;
            case 2: //Correction
                ss.setStatus(value.toString());
                break;
            case 3: //Date
               formatter.format(ss.getDatevent());
            case 4:
                new Boolean(true);
                
                break;
        }
    }

    @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.getAddress()-100);
            case 1:
                return ss.getDescription();
            case 2:
               return ss.getStatus();
            case 3:
                return formatter.format(ss.getDatevent());
            case 4:
                new Boolean(true);
            default:
                return null;
        }
    }

    public Sensor getEventsSensorsAt(int row) {
        return (Sensor) datalist.get(row);
    }

    public void addEventsSensors(Sensor ls) {
        datalist.add(ls);
        fireTableDataChanged();
    }

    public Sensor removeEventsSensorsAt(int row) {
        Sensor tmp = (Sensor) datalist.remove(row);
        fireTableDataChanged();
        return tmp;
    }

    public void addEventsSensorsList(List l) {
        datalist.addAll(l);
        fireTableDataChanged();
    }

4 Respostas

ViniGodoy

Ué… como vc espera que seja editável se você não altera o valor no setValueAt e nem retorna um valor do seu objeto no getValueAt?

No setValueAt você deveria estar fazendo algo como:

ss.setAtivar((Boolean)value);

E no getValueAt você deveria fazer algo como:

return ss.getAtivar();
fabricioempresa

Bom ViniGodoy obrigado pela sua dica porem esse ss que eu tenho são dados vindos do banco de dados.

Então o checkbox não vem nada do banco sendo assim se eu inicializar ele como true eu não sei como ao clicar em cima do checkbox ficar falso.

Essa é a minha dúvida.

Espero pela sua ajuda

Obrigado.

ViniGodoy

Então você tem 3 saídas:

1. Criar um campo ativo na sua classe do sensor;
2. Criar um Map<Sensor, Boolean> para armazenar esse valor;
3. Criar uma classe que encapsula sua classe do Sensor com um atributo boolean e um sensor.
Essa classe pode ser genérica:

public class Selectable<T> {
   private T selectable;
   private boolean selected;

   private Selectable(T selectable) {
      this.selectable = selectable;
      this.selected = false;
   }

   public T getSelectable() {
      return selectable;
   }
  
   public boolean isSelected() { 
       return selected; 
   }

   public void setSelected(boolean selected) { 
       this.selected = selected;
   }
}
fabricioempresa

Bom resolvi o meu problema da seguinte maneira

Comecei declarando o chechbox como false

sendo assim gerei um evento dentro do jtable na celula do checkbox

como um evento pidindo se ele realmente quer trocar o estado do checkbox (mais ou menos isso).

Quando ele confirma eu seto um valor true.

Eu sei que realmente ficou uma coisa estranha mas isso foi realmente o que me foi pedido então considero esse problema RESOLVIDO.

Desde já agradeço aos que me ajudaram.

Criado 14 de maio de 2010
Ultima resposta 18 de mai. de 2010
Respostas 4
Participantes 2