JTable

3 respostas
R

como eu faço para inserir um jcheckbox em uma jtable… tentei assim como me pasaram mais nao deu certo… ou eu nao coloquei no lugar certo… compila tal… mais nao funciona…

TableColumn sportColumn = jTable1.getColumnModel().getColumn(2);

JCheckBox ckbTeste = new JCheckBox(“Teste”,true);

sportColumn.setCellEditor(new DefaultCellEditor(ckbTeste));

3 Respostas

T

O jeito tradicional de fazer isso é usar um TableModel que indique que a coluna que tem de ter o tal checkbox é do tipo java.lang.Boolean.
Veja no Java Tutorial, que tem um exemplo com o checkbox.

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

R

Cara me desculpa a falta de experiencia… mais eu li o tutorial (traduzindo) mais nao identifiquei como ele colocou o check box na tabela… poderia me dar um exemplo…

P

Deixa eu ver se ajuda, nesse trecho de código a terceira coluna é um jCheckBox. Dá uma olhada:

public void JTabela(ResultSet pStr){
      Grade.removeAll();
        try{
           //Recebe o ResultSet da select.
           ResultSet rs = pStr;
           if (rs == null){
               JOptionPane.showMessageDialog(null,
               "Sua consulta ao Banco de Dados retornou vazia. Tente novamente.",
               "Aviso!",
               JOptionPane.ERROR_MESSAGE);
           }
           
           //Retorna as propriedades do ResultSet
           ResultSetMetaData rsmd = rs.getMetaData();

           //Inicia um vetor
           Vector vt = new Vector();
           
           //Laço while para percorrer os dados do ResultSet
           while (rs.next()){
             //O +2 é para a coluna com Booleano e coluna com Integer
             Object[] row = new Object[rsmd.getColumnCount() + 3];
             for (int it = 0; it < rsmd.getColumnCount(); it++)
               row[it] = this.getValue(rs, rsmd, it);
               //A coluna com valor Booleano sempre terá valor default "false"
               row[rsmd.getColumnCount()] = new Boolean(false);
               //A coluna com valor Integer sempre terá valor dafault "0"
               row[rsmd.getColumnCount()+1] = new Integer(1);
               //A coluna com valor String sempre terá valor default "00/00/0000"
               row[rsmd.getColumnCount()+2] = new String("00/00/0000");
               
               vt.add(row);
           }
           
           //Atribui o resultado a um objeto
           Object[][] lin = (Object[][])vt.toArray(new Object[0][0]);
           
           //Retorna aviso se não retornar nenhum cliente para o código digitado
           if (lin.length == 0){
               JOptionPane.showMessageDialog(null,
                    "Não foi encontrado pedido com este código.",
                    "Aviso!",
                    JOptionPane.WARNING_MESSAGE);
           }
           

           
           Grade.setModel(new DefaultTableModel(
                   lin,
                   new String [] {
                "Código", "Descrição", "Impressão", "Quantidade", "Data Venc."
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.Boolean.class, java.lang.Integer.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, true, true, true
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });       
           Grade.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);         
           for (int i=0;i < Grade.getColumnModel().getColumnCount();i++){
             
             // Configurar o Tamanhos das Colunhas individualmente
             Grade.getColumnModel().getColumn(0).setPreferredWidth(15);
             Grade.getColumnModel().getColumn(1).setPreferredWidth(350);
             Grade.getColumnModel().getColumn(2).setPreferredWidth(15);
             Grade.getColumnModel().getColumn(3).setPreferredWidth(15);
             Grade.getColumnModel().getColumn(4).setPreferredWidth(20);
           }

         }catch (SQLException sqle){
           JOptionPane.showMessageDialog(null,
                    "Impossível conectar com o Banco de Dados! Código: " + sqle.toString(),
                    "Erro!",
                    JOptionPane.ERROR_MESSAGE);
         }
    }
   
   public Object getValue(ResultSet rs, ResultSetMetaData rsmd, int col) throws SQLException{
      if ((rsmd.getColumnType(col + 1) == Types.TIMESTAMP) ||
          (rsmd.getColumnType(col + 1) == Types.DATE)){
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            try{
                Date dt = sdf.parse(rs.getString(col+1));
                sdf = new SimpleDateFormat("dd/MM/yyyy");
                return sdf.format(dt);
              }catch (ParseException pe){
                  return new String();
              }
          }
        return rs.getObject(col +1);
    }

Nesse exemplo eu alimento as duas primeiras colunas com um select (não editáveis pelo usuário), a 3º é o CheckBox, a 4º é um integer alimentado como 1 e a última é outro campo string que chega como 00/00/0000

Criado 6 de julho de 2006
Ultima resposta 6 de jul. de 2006
Respostas 3
Participantes 3