jTbale Swing não editar (não funciona)

Olá amigos

sou novo em java, estou usando Netbenas 6.1 e componente jjTable Swing, Já pesquisei muito na internet vários forums, tutorias documentação e tudo mais, mas infelizmente não consegui ainda fazer com que o jTable não permita edição.

[code]
private void CarregaLista() throws Exception {
ResultSet rst;
String str;

    stmt = bd.ConexaoBancoDados.conexao().createStatement();            
    
    ResultSet rs = stmt.executeQuery("select * from clientes order by nome");       
    
    String[] tableColumnsName = {"Nome", "Endereco", "Fone","Fone Comercial"};        
    
    DefaultTableModel aModel = (DefaultTableModel) jTable1.getModel();
    aModel.setColumnIdentifiers(tableColumnsName);      
    
    java.sql.ResultSetMetaData rsmd = rs.getMetaData();
    int colNo = rsmd.getColumnCount();
    
    while(rs.next()){
       Object[] objects = new Object[colNo];
      // for(int i = 0; i < colNo; i++) {
      // objects[i] = rs.getObject(i+1);
       objects[0] = rs.getObject(3);
       objects[1] = rs.getObject(9);
       objects[2] = rs.getObject(15);
       objects[3] = rs.getObject(16);
      
      aModel.addRow(objects);

    }
    
    jTable1.getColumnModel().getColumn(0).setPreferredWidth(350);
    jTable1.getColumnModel().getColumn(1).setPreferredWidth(400);      
    jTable1.getColumnModel().getColumn(2).setPreferredWidth(100);
    jTable1.getColumnModel().getColumn(3).setPreferredWidth(100);           
    jTable1.setPreferredScrollableViewportSize(new Dimension(700, 70));
    jTable1.setFillsViewportHeight(true);
    jTable1.getTableHeader().setReorderingAllowed(false);
   
    jTable1.setModel(aModel);  

}
[/code] :

se alguém puder ajudar ficaria muito grato.

Silvio Guedes

Fala camarada.

Olha, eu faço o seguinte.

No lugar de usar:

DefaultTableModel aModel = (DefaultTableModel) jTable1.getModel(); 

Eu uso:

           DefaultTableModel tableModel = new DefaultTableModel(colunas, 0) {

            @Override
            public Class getColumnClass(int column) {
                Class returnValue;
                if ((column >= 0) && (column < getColumnCount())) {
                    if (getValueAt(0, column) != null) {
                        returnValue = getValueAt(0, column).getClass();
                    } else {
                        returnValue = Object.class;
                    }
                } else {
                    returnValue = Object.class;
                }
                return returnValue;
            }

            @Override
            public boolean isCellEditable(int row, int col) {
                return false;
            }
        };

Falou! :wink:

Opa, só pra facilitar a variavel colunas nada mais é que um vetor de string contendo as colunas da sua tabela.
No seu caso seria o String[] tableColumnsName = {"Nome", "Endereco", "Fone","Fone Comercial"};

:smiley:

Amigo muito obrigado

funcionou perfeitamente, mas o programa trava agora nesta linha.

seu eu comentar funciona.

      jTable1.getColumnModel().getColumn(0).setPreferredWidth(350);

Silvio guedes

Oi Silvio.

Já dei essa dica milhões de vezes aqui. O ideal mesmo é entender como o JTable funciona e parar de usar o DefaultTableModel.

Esses dois artigos explicam isso certinho como montar o seu próprio modelo, e deixar a sua tabela tão editável quanto você quiser, evitando redudancia de informações e deixando o código muito mais organizado. Quando tiver um tempo, estude-os com carinho:
http://www.informit.com/articles/article.aspx?p=332278
http://www.informit.com/articles/article.aspx?p=333472

Aqui também tem um exemplo de TableModel:
http://www.guj.com.br/posts/list/98452.java

Esqueça o DefaultTableModel. Além de difícil de usar, o código dele fica menos encapsulado, ocupa mais memória, é mais lento e menos orientado a objetos. Vale realmente a pena aprender a fazer do jeito certo.

Olá amigos

muito obrigado à todos que me responderam consegui resolver:

antes com erro:

        jTable1.getColumnModel().getColumn(0).setPreferredWidth(350);
        jTable1.getColumnModel().getColumn(1).setPreferredWidth(400);      
        jTable1.getColumnModel().getColumn(2).setPreferredWidth(100);
        jTable1.getColumnModel().getColumn(3).setPreferredWidth(100);           

        jTable1.setPreferredScrollableViewportSize(new Dimension(700, 70));
        jTable1.setFillsViewportHeight(true);
        jTable1.getTableHeader().setReorderingAllowed(false);

        jTable1.setModel(aModel);  

depos sem o erro:

        jTable1.setPreferredScrollableViewportSize(new Dimension(700, 70));
        jTable1.setFillsViewportHeight(true);
        jTable1.getTableHeader().setReorderingAllowed(false);

        jTable1.setModel(aModel);  
        jTable1.getColumnModel().getColumn(0).setPreferredWidth(350);
        jTable1.getColumnModel().getColumn(1).setPreferredWidth(400);      
        jTable1.getColumnModel().getColumn(2).setPreferredWidth(100);
        jTable1.getColumnModel().getColumn(3).setPreferredWidth(100);           

depois deste comnando jTable1.setModel(aModel); é que o o jtable monta a tabela, como ainda não tinha montado dava erro.

Valeu mesmo;

Silvio Guedes