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

5 respostas
S

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.

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);  
}
:

se alguém puder ajudar ficaria muito grato.

Silvio Guedes

5 Respostas

Filipe_Chagas

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:

Filipe_Chagas

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:

S

Amigo muito obrigado

funcionou perfeitamente, mas o programa trava agora nesta linha.

seu eu comentar funciona.

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

Silvio guedes

ViniGodoy

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.

S

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

Criado 9 de agosto de 2008
Ultima resposta 9 de ago. de 2008
Respostas 5
Participantes 3