JTable não-editável (tá difícil)

Olá pessoal do GUJ,

Estou tentando tornar um JTable não editável, mas não estou conseguindo… eu tentei da seguinte forma:

modelo = new DefaultTableModel(){ public boolean isCellEditable(int rowIndex, int mColIndex){ return false; } }; jtable = new JTable(modelo);

Após essa criação do jtable eu atribuo a ele um JTable que está vindo da camada de persistência através de RMI assim:

O problema é que o jtable permite a edição das células normalmente…

Alguém sabe outra forma de fazer o jtable não editável (o jtable.setEnabled(false); não serve pois bloqueia a tabela, e preciso que ela seja selecionável, porém não editável)…

Agradeço a colaboração de todos…

Corrija-me se estiver errado…

modelo = new DefaultTableModel(){ public boolean isCellEditable(int rowIndex, int mColIndex){ return false; } }; jtable = new JTable(modelo);

Aqui você atribuiu a “jtable” uma nova tabela.

E aqui você atribuiu um outro objeto!! :wink:

Já tentou depois de atribuir o objeto correto (“obj.listar()”), dar um “setModel”??

eu também tenho essa duvida e não consegui resolver, mesmo na busca!

alguem aí sabe??



  Este obj.listar retorna um JTable certo?

  Entao.

[code]modelo = new DefaultTableModel(){ 
    public boolean isCellEditable(int rowIndex, int mColIndex){ 
         return false; 
    } 
}; 
jtable = (JTable) obj.listar;
jtable.setModel(modelo);[/code]

   :lol:

Este obj.listar retorna um JTable certo?

Entao.

modelo = new DefaultTableModel(){ public boolean isCellEditable(int rowIndex, int mColIndex){ return false; } }; jtable = (JTable) obj.listar; jtable.setModel(modelo);

:lol:

:wink:
Oi Arlen !
Estou tentando sincronizar uma JTable com os dados no Banco e uma JToolBar associada a ela e ainda não consegui. Mas nas minhas pesquisas encontrei algo que espero que te ajude no seu trabalho. procure no www.altavista.com.br o fonte java de nome TableDemo.java ou acesse pelo www.inf.ufsc.br/poo/java/tutorial/uiswing/components/example-swing/TableDemo.java e veja o metodo (da inner class) isCellEditable (true/false). Até mais!

Para nào deixa uma JTable editavel basta dar um setEnable(false);

Não é tão simples assim meu caro, pois como eu as vezes precisamos deixar a tabela clicavel.

1 curtida

I, não sei o que vc pretende ou para quem, mas já começar a baixaria é sacanagem. Eu entendi que é só sobresquecer o método da classe DefaultTableModel. Mas sim, tem gente que precisa estudar, como eu, que somente estou iniciando em java e a cada dia aprendemos coisas novas, como a que o fiz ao ler esse tópico.

Mas para quem estiver precisando, é só sobrescrever o tal método quando for instanciar o DefaultTableModel e não haverá problema.

dtmListaGeneros = new DefaultTableModel(colunas_listaGeneros, 0) { public boolean isCellEditable(int rowIndex, int mColIndex){ return false; } };

A comunidade é para isso: ajudar quem não sabe! Um pouco de humildade lhe cairia muito bem viu! :cry:

Bom o tópico é velhinho, mas eu também demorei para achar, entaum vou postar aq a solução, para futuras pesquisas…

DGDados.setUneditableColumns(new int[] {0,1,2,3,4,5,6,7,8,9});

Pois é isso, no vetor ali que é criado basta colocar o indice das colunas que serão não-editaveis…

Já que resucitou o tópico

não utilize DefaultTableModel
crie uma classe que extenda AbstractTableModel
e escreva o metodo

public boolean isCellEditable(int row, int col){ return false;//Não queremos nada editavel //ou então if(col == 3 || col == 4)return false;//se for a quarta ou quinta coluna^^ else return true; }

Fa assim

Jtable tblPesquisa = new Jtable(modelo)
{

public boolean isCellEditable()
{
return false;
}
}

modelo como parametro [e o DefaultTableModel… :smiley:

ai desculpa…

aqui segue o metodo isCellEditable certinho…

public boolean isCellEditable(int linha,int coluna){

return false;
}

Muito Bem…

Parabéns… :?

enialiger valeu!
eu to procurando isso a um tempo heheh

Gente do céu…hauha leiam a pergunta inteira antes de responder…rsrs

E não entendi pq não funcionou qnd vc sobrescreveu o método isCellEditable.
Veja este SCCEE rodando perfeitamente, com células não editáveis:

	public static void main(String[] args) {
		
		JFrame frame = new JFrame("Teste tabela não editável");
		JTable table = new JTable(10,10) {
			@Override
			public boolean isCellEditable(int row, int column) {
				return false;
			}
		};
		
		frame.setSize(800, 600);
		frame.setLocationRelativeTo(null);
		frame.getContentPane().add(table);
		frame.setVisible(true);
		
		
	}

Esse tópico, além de recorrente, é velho, portanto vou tranca-lo.

Para quem não sabe ainda como resolver, o correto é não usar o DefaultTableModel, como o Mark_Ameba já tinha dito. No lugar, crie o seu próprio TableModel, filho de AbstractTableModel.

Vejam esse ótimo tutorial na net:
http://www.informit.com/articles/article.aspx?p=332278
http://www.informit.com/articles/article.aspx?p=333472

Você também pode ver o site da Sun sobre o assunto:
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

Você pode baixar esse TableModel simples e ver como funciona:
http://www.guj.com.br/posts/list/57203.java#300612

Ou ainda baixar essa classe, que tem um tablemodel mais esperto e auto-filtro, estilo do excel:
http://www.guj.com.br/posts/list/100793.java

Você vai ter muito menos dor de cabeça e vai ficar com o código mais limpo, claro e mais encapsulado.

1 curtida