| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/01/2008 15:50:07
|
Schuenemann
GUJ Ranger
Membro desde: 13/01/2005 12:31:27
Mensagens: 854
Offline
|
Pessoal, já li alguns tutoriais e posts aqui do fórum, mas ainda não consegui desenhar checkboxes nas linhas pares da primeira coluna da tabela. As malditas aparecem em todas as linhas.
Meu model:
Coloquei o Boolean apenas nas linhas pares (os outros dados já foram inseridos):
Obrigado.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/01/2008 15:54:50
|
fabim
GUJ Master
![[Avatar]](/images/avatar/d4e3e8180a65648886ff348c7a6bbff5.jpg)
Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline
|
ja tentou um parênteses?
|
ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται
Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/01/2008 16:01:39
|
rdantas
Java Ninja
![[Avatar]](/images/avatar/c778a2d8bf30ef1d3c2d6bc5696defad.jpg)
Membro desde: 12/02/2005 01:32:20
Mensagens: 263
Localização: Formiga-MG
Offline
|
e que objetos vc está passando para linhas ímpares? Tente passar Strings vazias como teste, se der certo depois vc vê o que fazer.
qq coisa posta aí.
|
Desenvolvedor Java
Java em Pó - Blog para assuntos Java
"Só Deus salva, os mortais fazem backup!!!" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/01/2008 16:09:16
|
Schuenemann
GUJ Ranger
Membro desde: 13/01/2005 12:31:27
Mensagens: 854
Offline
|
fabiocsi wrote:ja tentou um parênteses?
Não influencia... além do mais, essa linha só define se é editável ou não
rdantas wrote:e que objetos vc está passando para linhas ímpares? Tente passar Strings vazias como teste, se der certo depois vc vê o que fazer.
Nenhum, estou deixando o default (null). Com String, lança ClassCastException.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/01/2008 16:40:54
|
fabim
GUJ Master
![[Avatar]](/images/avatar/d4e3e8180a65648886ff348c7a6bbff5.jpg)
Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline
|
Schuenemann wrote:
fabiocsi wrote:ja tentou um parênteses?
Não influencia... além do mais, essa linha só define se é editável ou não
Verdade viajei legal. Mas, pra fazer aparecer checkBox na table nao tem q mexer com CellRenderer nao? nao vi nada disso no codigo.
|
ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται
Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/01/2008 14:19:54
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline
|
O que você quer que apareça nas linhas ímpares?
Acho que você terá que fazer o seu próprio CustomCellEditor e CustomCellRenderer. E daí xunxar um pouquinho as coisas.
1. Faça um CustomCellRenderer que:
1.1. Teste o tipo do objeto sendo editado.
1.2. Se for um Boolean, usa o CellRenderer de Boolean.
1.3. Caso contrário, usa o DefaultCellRenderer;
2. Faça o mesmo para o CellEditor;
3. Altere o CellEditor e o CellRenderer da coluna um para os criados acima;
5. Faça o seu TableModel retornar um Boolean para as colunas com CheckBox e uma string vazia para as sem. Também faça ele retornar que as linhas sem o checkbox não são editáveis.
Tudo isso soa mais difícil do que parece.
|
@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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/01/2008 15:01:46
|
Schuenemann
GUJ Ranger
Membro desde: 13/01/2005 12:31:27
Mensagens: 854
Offline
|
Nas linhas ímpares não deve aparecer nada. Lembrando que isso é apenas para a primeira coluna, nas demais aparecerão String, Long, Double, etc.
Do 1 ao 3 vou ter que olhar essas classes que não conheço.
5. Faça o seu TableModel retornar um Boolean para as colunas com CheckBox e uma string vazia para as sem. Também faça ele retornar que as linhas sem o checkbox não são editáveis.
Como fazer isso? Assim, não vai.
Retornar null continua desenhando as checkbox. O não-editável nas ímpares já está funcionando.
Obrigado.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/01/2008 15:05:30
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline
|
Vai continuar dando ClassCastException enquanto você não alterar o Renderer e o Editor. Eles é que tentam fazer cast do valor das colunas Boolean para o tipo Boolean. Quando você fizer o seu próprio Renderer, você só vai delegar para o Renderer de boolean default se o tipo do valor for efetivamente boolean. Caso contrário, você vai delegar para o DefaultRenderer, que trata strings. O mesmo pro editor.
|
@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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/01/2008 16:02:16
|
Schuenemann
GUJ Ranger
Membro desde: 13/01/2005 12:31:27
Mensagens: 854
Offline
|
É isso? Como delegar para o Renderer de boolean default?
Outra coisa: eu adiciono ele e o CellEditor apenas na primeira coluna ou como default da tabela?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/01/2008 16:22:28
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline
|
Se for Boolean, você retorna uma instância de
Que vai te retornar um objeto dessa classe aqui:
This message was edited 2 times. Last update was at 22/01/2008 16:23:51
|
@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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/01/2008 16:26:02
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline
|
O seu código está certo.
Adicione o renderer só para a coluna. Pensando um pouco, é provável que você nem tenha que fazer a mesma coisa para o CellEditor.
Basta definir o CellEditor de Boolean para a coluna também. Afinal, as colunas sem Booleans dentro não são editáveis. E o CellEditor só entra em ação quando o usuário consegue editar a célula.
|
@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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/01/2008 16:41:36
|
Schuenemann
GUJ Ranger
Membro desde: 13/01/2005 12:31:27
Mensagens: 854
Offline
|
Nem tanto... quando não era Boolean e estava na coluna zero, ele chamava o próprio Renderer recursivamente até estourar a pilha
Usando o Renderer default de String (aparentemente) deu certo.
Alguns pontos:
1- Não defini CellEditor.
2- Acho meio tosco um clique em qualquer local da célula ativar o checkbox. Tem algum jeito simples de resolver isso ou vou precisar escutar eventos de mouse? Em caso contrário, posso deixar a coluna estreita para isso não ficar muito perceptível.
3- Para definir ações dos checkboxes, é preciso implementar TableModelListener?
É, sou meio leigo em Swing
Obrigado de novo.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/01/2008 16:50:08
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline
|
Schuenemann wrote:1- Não defini CellEditor.
Beleza.
Schuenemann wrote:2- Acho meio tosco um clique em qualquer local da célula ativar o checkbox. Tem algum jeito simples de resolver isso ou vou precisar escutar eventos de mouse? Em caso contrário, posso deixar a coluna estreita para isso não ficar muito perceptível.
Bem, esse é o comportamento padrão da maior parte das tabelas com checks.
Não tem um jeito simples de fazer isso, e checar eventos do mouse não é uma boa também. Você pode deixar a coluna mais estreita usando o método setWidth do TableColumn (a JTable, q eu me lembre, tem um método para retornar o TableColumn. Na pior das hipóteses, consulte o TableColumnModel dela).
Via de regra, não é uma boa prática alterar o comportamento padrão dos componentes do Swing, a menos que existem ganchos especificamente para isso. Além de complicado, é sujeito a erros, difícil de manter e ainda não respeita os vários look&feels (e se for respeitar, vai ser mais difícil ainda).
Schuenemann wrote:3- Para definir ações dos checkboxes, é preciso implementar TableModelListener?
Que tipo de ações? Se forem ações que atuem sobre os próprios dados do model, não, você pode fazer isso no model, desde que propague o evento TableRowChanged na linha em questão. Caso contrário, sim, implemente o listener. Uma outra alternativa é implementar um dos listeners da própria JTable.
|
@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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/01/2008 17:41:56
|
Schuenemann
GUJ Ranger
Membro desde: 13/01/2005 12:31:27
Mensagens: 854
Offline
|
Viajei. Não preciso de ação alguma. Na verdade, só preciso posteriormente saber quais são as linhas checadas. O único problema que restou é que eu gostaria que algumas células em colunas Double ficassem vazias. Antes, bastava eu setar a célula null, mas, desde que implementei meu próprio TableModel, isso lança um NullPointerException.
This message was edited 1 time. Last update was at 15/02/2008 13:10:56
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/02/2008 13:13:20
|
Schuenemann
GUJ Ranger
Membro desde: 13/01/2005 12:31:27
Mensagens: 854
Offline
|
Bom, voltei a mexer na classe e encontrei o erro. O getColumnClass() retornava null no caso de null. Resolvi retornar String.
Como ficou:
Obrigado pelas respostas.
|
|
|
 |
|
|