Adicionar linha por linha em jTable com checkbox [RESOLVIDO]

1 resposta
filiperangel

Galera, to implementando uma jTable que possui colunas com checkbox e outras com texto normal. Já consegui acrescentar o checkbox nas colunas porém só consigo acrescentálas através de um vetor de Objetos, logo eu tenho que pré definir os valores da jTable.

Minha situação é a seguinte, o usuário clica num botão e as valores vão incluindo em uma nova linha no jTable, valores esses que são Textos e checkbox.

Outra questão é como colocar o nome das colunas.

Segue minha classe de AbstractTableModel que serve como modelo para a jTable.

class MyModel extends AbstractTableModel {  
  
       Object[][] data = new Object[1][9];  
     };
       public MyModel() {  
         for (int i = 0; i < data.length; i++) {  
                   data[0][0] = "Teste";  
                   data[0][1] = "Parador";
                   data[0][2] = new Boolean(false);
                   data[0][3] = new Boolean(false);
                   data[0][4] = new Boolean(false);
                   data[0][5] = new Boolean(false);
                   data[0][6] = new Boolean(false);
                   data[0][7] = new Boolean(false);
                   data[0][8] = new Boolean(false);
         }
         ar.add(data);
       }  
   
       public int getRowCount() {  
            return data.length;  
      }  
   
       public int getColumnCount() {  
             return data[0].length;  
       }  
   
       public Object getValueAt(int row, int col) {  
             return data[row][col];  
       }  
   
    @Override
       public boolean isCellEditable(int row, int col) {  
             return false;  
       }  
   
    @Override
       public Class getColumnClass(int column) {  
             Class klass = String.class;  
            if (column > 1) klass = Boolean.class;  
             return klass;  
       }  
  
    @Override
       public void setValueAt(Object value, int row, int col) {  
           if(col > 1)
           data[row][col] = (Boolean)value;
           else
           data[row][col] = value;
           fireTableRowsUpdated(row, row);
       }  

 }

1 Resposta

filiperangel

Bom galera, depois de muito apanhar consegui resolver meu problema. Criei um Arraylist com os objetos, assim consigo ter quantas linhas for necessário dinamicamente.

Segue o código, qualquer dúvida só falar.

class MyModel extends AbstractTableModel {  
       static ArrayList<Object[][]> lista = new ArrayList<Object[][]>();
       Object[][] objeto = new Object[1][9];
       final String[] nomesColunas = {  
             "Hora", "Serviço", "Seg", "Ter", "Qua", "Qui" , "Sex", "Sab", "Dom"
     };
    public MyModel(Object value) 
    { 
        Object[][] objetoNovo = (Object[][])value;
        objeto[0][0] = objetoNovo[0][0];  
        objeto[0][1] = objetoNovo[0][1];
        objeto[0][2] = objetoNovo[0][2];
        objeto[0][3] = objetoNovo[0][3];
        objeto[0][4] = objetoNovo[0][4];
        objeto[0][5] = objetoNovo[0][5];
        objeto[0][6] = objetoNovo[0][6];
        objeto[0][7] = objetoNovo[0][7];
        objeto[0][8] = objetoNovo[0][8];
        lista.add(objeto);
    }  
   
    public int getRowCount() 
    {  
        return lista.size();
    }  
   
    public int getColumnCount() 
    {
        return objeto[0].length;  
    }  
       
    @Override
    public String getColumnName(int col)
    {
        return nomesColunas[col];
    }

    public Object getValueAt(int row, int col) 
    {
        if(lista.size() > 0)
        {
            System.out.println("LISTA" + lista.size());
            System.out.println("Linha" + row);
            Object[][] objetoNovo = lista.get(row);
            //System.out.println(objetoNovo[row][col]);
            return objetoNovo[0][col];  
        }
        return objeto;
    }  
   
    @Override
    public boolean isCellEditable(int row, int col) 
    {  
        return false;  
    }  
   
    @Override
    public Class getColumnClass(int column) 
    {  
        Class klass = String.class;  
        if (column > 1) klass = Boolean.class;  
        return klass;  
    }  
  
    @Override
    public void setValueAt(Object value, int row, int col) 
    {
        lista.add((Object[][])value);
        fireTableRowsUpdated(row, row);
    }
    
    public void removeall()
    {
        lista.removeAll(lista);
    }
}

Na Interface do meu sistema eu monto o Object e passo para o construtor.

Quando eu fecho minha janela eu removo todas as linhas.

Criado 19 de abril de 2008
Ultima resposta 21 de abr. de 2008
Respostas 1
Participantes 1