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!
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"};
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