Ação no modelo de JTable  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
diogoroos
Thread.start()

Membro desde: 16/01/2007 13:15:41
Mensagens: 32
Offline

Bom dia pessoal.
--Até vi alguns tópicos criados aqui e em outros fóruns mas a solução para este problema não ficou clara.
Queria saber se vocês já conseguiram implementar uma alteração em uma célula X enquanto digita-se algo em determinada célula.
Preciso de algo parecido com este abaixo, porém para células de uma JTable:

Sei que tem que implementar o TableModelListener e as ações devem ser no Model, e não na JTable, mas já quebrei a cabeça e não consegui. O máximo que consegui desta maneira foi mostrar uma msg dizendo que houve uma alteração na célula (TableModel.UPDATE), mas o valor é alterado para o que estava anteriormente após a msg. Tentei um setValueAt no evento do Model mas não consegue encontrar a linha/coluna que especifiquei e dá exceção.
Valeu!
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Por que na implementação do seu setValueAt do model você não altera os dois valores?

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
diogoroos
Thread.start()

Membro desde: 16/01/2007 13:15:41
Mensagens: 32
Offline

ViniGodoy wrote:Por que na implementação do seu setValueAt do model você não altera os dois valores?

Exceção de índice... vou colocar novamente o TableModelListener para ver exatamente o erro e posto. Você teria um exemplo para eu ver se estou fazendo da maneira correta ?
-Valeu pela atenção.
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

diogoroos wrote:Exceção de índice... vou colocar novamente o TableModelListener para ver exatamente o erro e posto. Você teria um exemplo para eu ver se estou fazendo da maneira correta ?
-Valeu pela atenção.


Como assim "exceção de índice". Você tem um model próprio?

A idéia é atualizar duas propriedades do seu objeto, ao invés de uma. Então é só fazer isso!


Valores seria um JList com sua classe, seja ela qual for.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
diogoroos
Thread.start()

Membro desde: 16/01/2007 13:15:41
Mensagens: 32
Offline

ViniGodoy wrote:
diogoroos wrote:Exceção de índice... vou colocar novamente o TableModelListener para ver exatamente o erro e posto. Você teria um exemplo para eu ver se estou fazendo da maneira correta ?
-Valeu pela atenção.


Como assim "exceção de índice". Você tem um model próprio?

A idéia é atualizar duas propriedades do seu objeto, ao invés de uma. Então é só fazer isso!


Valores seria um JList com sua classe, seja ela qual for.


Estou usando DefaultTableModel pq ainda não consegui criar um AbstractTableModel com JCheckBox...
-Obrigado pelo exemplo.
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Basta fazer:



Não deixe de ler esses ótimos artigos sobre o assunto:
http://www.informit.com/articles/article.aspx?p=332278
http://www.informit.com/articles/article.aspx?p=333472

Você não vai se arrepender. Usar um model próprio evita duplicação de dados, deixa o código mais limpo, mais organizado e mais fácil.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
diogoroos
Thread.start()

Membro desde: 16/01/2007 13:15:41
Mensagens: 32
Offline

ViniGodoy wrote:Basta fazer:




Obrigado Vinícius!

Desculpe a ignorância a respeito, estou tentando implenetar a classe com um modelo AbstractTableModel mas ainda não consegui. O que seria setValorOriginal ?

A forma que estou utilizando o DefaultTableModel é a seguinte:


E para popular a tabela eu faço:


Se não for pedir demais, como ficaria com AbstractTableModel ao invés de DefaultTableModel ?

Muito obrigado mais uma vez.
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Você já leu os artigos que eu te passei?

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Olha só.

Suponha que vc tenha a classe:


Aqui não coloquei implementação. Mas suponha que esses gets e sets funcionam.

Aí vc cria o seu TableModel. Ele vai trabalhar diretamente com uma lista de TitulosDoMains. A mesma que vc obtém do seu ServerFacade.

Vamos supor que vc queira para coluna 0 o valor Original e para coluna 1 o valor aberto.



Agora, para fazer sua tabela, faça só:


O ideal ainda seria adicionar métodos para inserir e remover títulos do seu modelo. Para isso, você terá que usar os eventos para avisar a tabela que isso ocorreu. Os eventos chamam-se fireTableRowInserted, fireTableRowRemove. Um exemplo:



O que vc tem que entender é que quem chama os métodos do model é a tabela. É a forma dela perguntar para o seu programa o que colocar em seu interior.
Ela diz "Estou desenhando a linha row e coluna col. Que valor tem aí?". Mas ela faz isso através do método getValueAt.

Da mesma forma, quando alguém edita sua tabela, ela diz:
"Ei! Editaram uma das células. É a de linha rowIndex e coluna columnIndex. O objeto, já com a modificação é esse aValue aqui.". Ela faz isso através do setValueAt. Então, vc atualiza o seu modelo, se achar que deve.

A regra é:
1. A tabela desenha dados, mas não sabe que dados são esses;
2. O modelo é quem sabe a respeito dos dados;

This message was edited 6 times. Last update was at 17/11/2008 13:08:26


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team