Desabilitar a Edição de apenas uma coluna de um JTable

Olá…

Gostaria de saber se há um modo de desabilitar a edição de apenas uma coluna de um JTable…

Desde já obrigado pela atenção…

T+

Vc pode sobrescrever o método isCellEditable no tableModel que vc estiver usando!!!

fallow

Cara… tens um exemplo…?

Esse exemplo é usando uma DefaultTableModel:

  DefaultTableModel model = new DefaultTableModel(new Object[][] {{"Teste11", "Teste21"}, {"Teste21", "Teste22"}}, new Object[] {"Coluna 1", "Coluna 2"}) {
    public boolean isCellEditable(int row, int column) {
      // se a coluna for a 2 não pode ser editada lembrando que 1 é a 0
      if (column == 1) {
        return false;
      }
      return super.isCellEditable(row, column);
    }
  };
  JTable table = new JTable(model);

Mas se vc estiver usando uma TableModel sua, fica mais fácil ainda!!!

espero ter ajudado!!!

Pessoal, como muito por aqui sou iniciante também!..sr
Tenho uma tela de Pesquisa de Cliente (JTable) e outra para cadastro de Cliente.
Gostaria de desabilitar a edição dessa JTable e quanto o usuário clicasse 2x no registro, a tela de cadastro de cliente se abriria já com os dados do clinente para alteração.

Como eu faço isso??
desde já muito obrigado

Rogério
Netbeans 5.5.1

Para setar quais colunas podem ser editadas, basta clicar com o botao direito na tabela e escolher a opcao “conteudo da tabela” (a primeira ou segunda opcao).

Na aba colunas, basta desmarcar a opcao editavel da coluna que desejar.

rogereza. Para isso, crie um form com os campos correspondentes e chame-o no evento MouseClicked da sua tabela.

Espero ter ajudado.

Amigo geidivan, tentei fazer o que vc falou, desculpe-me mas não consegui.
Eu quero deixar minha JTable sem edição alguma…só quero deixar com que usuários possa clicar 2x em qualquer registro para alterar os dados em outro Form, cujo os dados irão para os devidos campos


Conseguiu ver as propriedades de cada coluna? Caso nao, nas propriedades, altere o model que tambem mostra as colunas e as opcoes de edicao.

Outra coisa. Voce configura o modelo manualmente? Se sim, limpe o model em propriedades, pois um ira sobrepor o outro.

Caso nao consiga, faca manualmente mesmo:

tabela.getColumnModel().get(0).setEditable(true);

O get(i) e o indice da coluna da sua tabela. Faca isso para todas as colunas.

Oooo meu amigo, diante mão, obrigado pela força!
Deixa eu lhe perguntar uma coisa…esse código eu coloco no evento MousePressed?
sou leigo leigo em java…estou começando agora!

Valeu!

Opa. Desculpa a falta de detalhe.

Isso ai e pra impedir editar a coluna que desejar. Como prentende bloquear a tabela inteira, faca ao inicar a tabela. Clique com o direito nela e va em personalizar codigo. Abaixo de tudo, coloque esse codigo.

Quando voce clica e arrasta um objeto (JTable, JLabe, JTextField,etc…) o Netbeans cria a configuracao inicial padrao desse objeto (cor, fonte, texto). Essas configuracoes sao as configuracoes que voce altera em propriedades: por exemplo, se voce muda a fonte, nesse codigo personalizado e inserido uma linha setando a fonte de acordo com a que voce escolheu.

Voce pode ver isso tambem indo em propriedades na aba codigo. La mostra os codigos de seu objeto e quando ele e chamado (quando cria o objeto, depois de criar o objeto, quando estancia o objeto, depois que estancia o objeto, etc…). Bom, isso e so uma breve explicacao.

Enfim, coloca no final mesmo no personalizar codigo que vai funcionar. Assim que sua tabela foi mostrada, essa propriedade vai ser setada.

Testa ai e me diga se deu certo.

Blz brother…
Vou tentar aqui e lhe falo assim que conseguir!
Valeu mesmo!

geidivan, tentei de tudo aqui…não consegui
a minha JTable já está fazendo os filtros das pesquisas e tudo mais…
não sei mais o que fazer…

estou usando o seguinte código

private void listarContatos() {
ContatoControl cont = new ContatoControl();
List Contatos = cont.listarContatos("%" + tfPesquisaRazao.getText().trim() + “%”);
mostrarContatos(Contatos);
}

    private void mostrarCadastrodeContato() {
     if(cadastrodecontato == null){
        cadastrodecontato = new Contatos();
        cadastrodecontato.setVisible(true);
    }else{
        cadastrodecontato.setVisible(true);
    }
     
}

vê se ajuda em alguma coisa
vlw

Se vc eh iniciante e quer trabalhar com tabelas, vai precisa ler um pouco…

Recomendo:

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

e

http://www.guj.com.br/posts/list/13322.java

Dá um print do modelo da sua tabela e posta aqui. Clica com o direito nela, Conteúdo da tabela, aba colunas.

Manda um print das propriedades também.

Boa noite, estou com um problema parecido, tenho que criar um sistema que faça cadastro de uma clinica médica usando banco de dados, até ai tudo ok, mas após inserir alguns dados na JTable quando vou selecionar alguma coluna se eu clico 2x ele marca a coluna para editar podendo assim alterar os dados, mas eu queria que não fosse possivel editar mas não estou conseguindo e outra coisa também quando eu clico numa linha gostaria que ele selecionasse toda a linha de todas as colunas mas ele só seleciona a da coluna que eu cliquei. bom segue em anexo a imagem para vcs entender melhor.

http://img22.imageshack.us/img22/6969/jtable.jpg

[list]Propriedades[/list]
http://img17.imageshack.us/img17/4231/propried.jpg

[list]Colunas[/list]
http://img17.imageshack.us/img17/4199/coluna.jpg

[list]Tentei marcar para não editar lá nas propriedades da tabela mas não adiantou.
Ficou assim :[/list]

[code]tbTabela = new javax.swing.JTable();

tbTabela.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {

},
new String [] {
    "Codigo", "Nome"
}

) {
boolean[] canEdit = new boolean [] {
false, false
};

public boolean isCellEditable(int rowIndex, int columnIndex) {
    return canEdit [columnIndex];
}

});

tbTabela.setCellSelectionEnabled(true);

tbTabela.setFocusable(true);

tbTabela.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
tbTabelaMouseClicked(evt);
}
public void mousePressed(java.awt.event.MouseEvent evt) {
tbTabelaMousePressed(evt);
}
});

spDados.setViewportView(tbTabela);

tbTabela.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

[/code]

Se alguem puder me dar uma ajuda eu agradeço muito!!!

Valeuu

Para os iniciantes, este link é muito bom. É de Mark_Ameba, neste post ele exibe um TableModel blz…

Obs : Quando quiser pegar a linha selecionada e editar em outra tela, adcione um listener a JTable e manipule o mouseClicked.

Veja se ajuda a alguem…

Sim, eu ia fazer isso, de ao dar os 2x cliques chamar a tela para alterar os dados mas eu queria saber como fazia para que quando desse os 2x cliques a JTable ficasse sem opção para editar caso eu não chamasse a tela

Li o material e executei o programa e é exatamente assim que eu queria mas não consigo entender o código,
são muitas classes pra implementar uma ObjectTableModel neste exemplo, mas esse resultado também pode ser obtido usando uma DefaultTableModel ?

Mais alguem poderia me ajudar ?

Valeu

Cara, o melhor jeito é criar seus models mesmo. Na primeira vez é uma trabalheira mesmo, mas depois de pronto você poderá usar esses modelos sempre em qualquer projeto, alterando só algumas coisas caso queira.

Faz um esforço para implementar estes models que depois será melhor. São eles: TableModel, CellRenderer, ColumnRenderer e ColumnHeaderRenderer.

Beleza, vou fazer isso, mas nesse caso em particular, se o meu objetivo só fosse fazer com que a tabela não fosse editável, eu não precisaria implementar todas essas classes né ? só a TableModel e o unico método que eu teria que mudar em específico seria o isCellEditable, certo ? Porque nesse caso está tudo funcionando como deve ser, o unico detalhe é a possibilidade de editar a tabela que eu não queria…mas fora isso tá beleza…

Uma Duvida, qual o método pra modificar eventos quando o mouse é clicado 2x ?
mas somente quando é clicado 2x pois eu tentei com o método MouseClicked(java.awt.event.MouseEvent evt)
mas mesmo clicando 1vez já ocorre evento

Valeu