Dúvidas usando ObjectTableModel  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
Ironlynx
Moderador
[Avatar]

Membro desde: 02/05/2003 01:06:41
Mensagens: 3515
Localização: The other side of the screen
Offline

Tô fazendo um tutorial para o GUJ sobre como usar o HSQLDB 2.0(tem um aqui, mas ele é por cima, não faz nenhuma operação-search,update,insert,delete-no banco), e não quero perder tempo construindo N tablemodels.
Testei hoje o ObjectTableModel(by MarkyVasconcelos) e parece bem bacana.
Ao que interessa:
Num momento da App, o usuário entra num JFrame, e seleciona numa Combo o item que ele quer preencher numa JTable(logo abaixo dessa combo).Por Exemplo, digamos que o user selecionou "Atividade" na combobox.Aparecerão no JTable, 4 colunas(podem ser várias linhas):Atividade,frequência,minutos,média
As colunas Atividade e Média, já serão automaticamente preenchidas(Vem da tabela "Atividade"),
as de frequência e minutos serão preenchidas pelo usuário.Exemplo:
A F Min Méd
Cinema 120
Teatro 100

Perguntas:
1-Como eu faço o "binding" usando o ObjectTableModel para a utilização da tabela Usuario_atividade(que é a JTable que o usuário vai preencher) com Atividade(um model pegando alguns dados de outro)?Essa tabela será salva depois que o usuário preencher os campos.Sim, se tiverem 10 Atividades, serão 10 registros que serão salvos na tabela Usuario_atividade em sequência.

2-Dá para fazer um Formatter ter controle individual da célula comparando com outra?
Imagine que ele esteja preenchendo a coluna "Min", ao passar para a debaixo, ocorrerá uma
verificação que compara o valor que o usuário digitou com a célula respectiva na coluna "Med"(ambas BigDecimal).
Se for menor, fica(a célula) vermelha, azul se for maior.

E antes que perguntem, sim JTable não é um DataGrid(deve ser evitado...), mas no caso serve para ilustrar o que eu quero mostrar(inclusive uns erros de inserção no BD).



Não basta persistir...tem que prevalecer!
Ironlynx
Anarquista de Sistemas
http://osereojava.blogspot.com/
[WWW]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Então, 1° voce devia ter um modelo que representa-se esse Usuario_Atividade com os atributos que voce quer para mostrar na JTable, e depois de mudar os valores nela voce deve pegar a lista de todos os itens e fazer a inserção/alteração ou qualquer outra coisa que quiser fazer com os dados.
Ou voce pode ter uma classe Usuario que tenha uma tributo Atividade, o model suporta voce pegar os dados dos atributos das classes e ainda altera-los pelas celulas da tabela.

2°, não da pra fazer isso, do modo que fiz, o formatter sabe apenas que um dado está vindo do model e ele precisa mandar formatado para a tabela ou vindo da tabela e converter para o tipo de dado original para ser colocado no model.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
Ironlynx
Moderador
[Avatar]

Membro desde: 02/05/2003 01:06:41
Mensagens: 3515
Localização: The other side of the screen
Offline

1-Na verdade, o model UsuarioAtividade só existirá mesmo depois do usuário preencher a JTable.Atividade está assim: id,Atividade, media
Usuario_Atividade:id,Atividade,frequência,minutos,média,Date
Só as 4 serão mostradas,não há uma forma de injetar os dados?Poe um pequeno exemplo.


2-Eu já fiz, só que não fica muito bonito, se pudesse interar entre Formatters iria ser punk.Usando um método porco, é só fazer assim:


Vou interando entre uma coluna e outra comparando o valor de uma célula com outra.
Se for menor:

funciona,mas...it tastes like gambiarra!

Não basta persistir...tem que prevalecer!
Ironlynx
Anarquista de Sistemas
http://osereojava.blogspot.com/
[WWW]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

É, não tem como voce injetar desse jeito.

O que voce pode fazer é montar o é mesclar o Atividade e colocar nos models correspondentes em UsuarioAtividade, e mostrando o model já vai ter os valores que voce quer.

E ta ai, duas boas dicas para eu melhorar o model.
Só me falta tempo pra mudar =/

Ironlynx wrote:
funciona,mas...it tastes like gambiarra!

Pior seria se fosse gambiarra e com DefaultTableModel.
Hehe

This message was edited 1 time. Last update was at 25/08/2010 14:54:56


Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
Ironlynx
Moderador
[Avatar]

Membro desde: 02/05/2003 01:06:41
Mensagens: 3515
Localização: The other side of the screen
Offline

o é mesclar o Atividade e colocar nos models correspondentes em UsuarioAtividade, e mostrando o model já vai ter os valores que voce quer.

Mas usando o ObjectTableModel como faço isso?
Dá para fazer um Atividade a = atividadeModel.getValue(3);//pegar média
e ir colocando em UsuarioAtividade?Fiquei meio perdido como eu notifico meu model principal(UsuarioAtividade) de que ele vai pegar esses valores de outro(ou de uma tabela do BD, por exemplo).

Não basta persistir...tem que prevalecer!
Ironlynx
Anarquista de Sistemas
http://osereojava.blogspot.com/
[WWW]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Então, pensei em fazer isso fora do model.

Voce pode fazer quando carrega do BD. Algo como:

E depois mandar listar a lista que isso retorna.
Ou então usar o query by example do hibernate (que vou ficar te devendo exemplo).

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
Ironlynx
Moderador
[Avatar]

Membro desde: 02/05/2003 01:06:41
Mensagens: 3515
Localização: The other side of the screen
Offline

E depois mandar listar a lista que isso retorna.

É, eu pensei da mesma forma.O problema dessa abordagem é que eu tenho que permitir que alguns campos sejam nulos para serem preenchidos depois.(Mas me parece a melhor forma, pois o model virá todo estruturado)
Não vou usar Hibernate.Tô no velho e bom JDBC para poder mostrar alguns erros de SQL para os usuários(como as famosas aspas simples/duplas...).

Não basta persistir...tem que prevalecer!
Ironlynx
Anarquista de Sistemas
http://osereojava.blogspot.com/
[WWW]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Mas sua dica ficou gravada, fazer umas magias negras pra copiar os atributos em alguns lugares. Hehe

Imaginei que voce provavelmente não usava hibernate por isso não postei o exemplo (E pra falar a verdade nem sei usar o Example direito).

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
Ironlynx
Moderador
[Avatar]

Membro desde: 02/05/2003 01:06:41
Mensagens: 3515
Localização: The other side of the screen
Offline

Marky, onde estão os Docs da sua API?Quero saber quais os Formatters estão por padrão(por exemplo, meus números são bigdecimal, tenho que criar um BigDecimalFormatter para o usuario editar na tabela ou tem pronto?)...

Não basta persistir...tem que prevalecer!
Ironlynx
Anarquista de Sistemas
http://osereojava.blogspot.com/
[WWW]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

É.. docs :oops: esta faltando mesmo.

E o unico Formatter que tem é o DefaultFormatter.


É que quando eu fiz, eu não sabia se eu já implementava os formatters mais utilizados ou deixava para customizar, no final, deixei para customizar. Mas implementar varios deles é facil, e da até para colocar com default os comuns.

This message was edited 1 time. Last update was at 26/08/2010 11:26:51


Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team