| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/04/2011 14:48:22
|
eberson_oliveira
JavaGuru
![[Avatar]](/images/avatar/b0074757eb8e629f5a4c89a4b40b277e.jpg)
Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline
|
Olá a todos,
Estou aqui tentando resolver um problema relacionado ao foco de uma aplicação. A lógica do foco é a seguinte:
- Existem dois tipos de ordenação (para troca de foco) possíveis:
1 - O foco navega na ordem em que os componentes foram inseridos no container
2 - O foco navega seguindo uma ordem aleatória definida pelo programador. Nesse modelo cada componente deve saber qual é o componente que está posicionado antes e depois dele.
- Alguns campos ficam desabilitados na tela e só passam a estar habilitados de acordo com uma lógica estabelecida por outro campo. Por exemplo: eu tenho um campo nota fiscal e um campo fornecedor. O campo fornecedor não pode ser informado sem que uma nota tenha sido informada e validada. Na lógica do sistema, o campo nota fiscal começa habilitado e o campo fornecedor desabilitado. O campo fornecedor só vai ser habilitado quando o campo nota for informado e validado. Não sei se chega a ser relevante, mas as validações são feitas baseadas no InputVerifier. 70% das telas do sistema tem esse tipo de comportamento.
- Tenho uma implementação de FocusTraversalPolicy que permite que a ordem do foco seja mantida de acordo com o "esperado".
Meu problema, quando minha implementação de FocusTransversalPolicy tenta ordenar esses dois campos (nota fiscal e fornecedor) ela descobre que o campo fornecedor é o próximo, mas não o elege como o próximo, pois ele ainda está desabilitado... acaba elegendo outro, quando o foco prossegue o campo fornecedor habilita mas o foco já foi para outro lugar...
Alguém tem alguma idéia de como posso resolver esse problema?
Espero que tenha conseguido ser claro o suficiente.
Desde já agradeço pela atenção.
[]s
Éberson
This message was edited 1 time. Last update was at 26/04/2011 09:18:59
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/04/2011 07:19:45
|
eberson_oliveira
JavaGuru
![[Avatar]](/images/avatar/b0074757eb8e629f5a4c89a4b40b277e.jpg)
Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline
|
Bom dia,
Andei fazendo umas pesquisas e cheguei a duas possíveis soluções:
- Invocar o processo de validação dentro do transferFocus dos meus componentes, assim poderei "adiantar" o processo e garantir que o componente eleito pela minha FocusTransversalPolicy é o componente que pode receber o foco. Acho que essa funciona, mas não sei se é seguro/recomendado modificar esse comportamento.
- Ao invés de tornar meu campo desabilitado vou tentar torná-lo não editável. Não sei se isso vai resolver, vou testar e ver o que acontece. Não sei se vai funcionar, pois ao torná-lo não editável terei que adicionar essa regra à minha política de foco e pode ser que o mesmo problema ocorra novamente.
Se alguém puder me ajudar...
[]s
Éberson
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/04/2011 09:20:38
|
paty_trind
Virtual Machine Man
Membro desde: 15/11/2010 13:35:39
Mensagens: 736
Offline
|
neste topicohttp://www.guj.com.br/java/233326-ajuda-para-habilitar-e-desabilitar-itens-de-menuresolvido
eu resolvi um problema semelhante a este,
espero que te ajude!
|
Developer Java EE Jr. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/04/2011 10:15:59
|
eberson_oliveira
JavaGuru
![[Avatar]](/images/avatar/b0074757eb8e629f5a4c89a4b40b277e.jpg)
Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline
|
Bom dia,
Li o seu tópico mas o problema aqui é diferente.
Envolve habilitar/desabilitar determinados campos juntamente com o processo de foco.
O que eu preciso:
- Tenho uma tela T.
- Dentro dessa tela eu tenho três campos: A, B e C.
- Os campos A e C estão sempre habilitados.
- O campo B fica desabilitado e só habilita quando o conteúdo de A for válido.
- O conteúdo de A será valido de acordo com uma regra que coloquei dentro de um InputVerifier. Após validar o campo A, eu disparo um listener (que acabei criando aqui) que permite atualizar o estado de todos os componentes que dependem do campo A. Assim o campo B fica sabendo que o conteúdo do campo A é válido e habilita para edição.
- O foco deve começar no campo A. Ao sair desse campo o foco deve ir para o campo B se estiver habilitado ou para o campo C caso o campo B estiver desabilitado.
O fluxo que verifiquei ocorre mais ou menos assim:
- Campo A vai perder o foco
- A FocusTranversalPolicy deve indicar qual é o próximo componente que receberá o foco
- O componente eleito sofrerá um requestFocus
- A validação do campo A será executada. Se for executada com sucesso o foco vai para o campo eleito, do contrário fica no campo com conteúdo considerado inválido.
Meu problema é que ao invocar a FocusTransversalPolicy o campo B ainda está desabilitado, pois a validação do campo A ainda não foi executada. Logo, a minha policy indica que o campo C deve receber o foco... daí o campo C recebe um requestFocus que dispara a validação do campo A. O campo A é validado e notifica os ouvintes, habilitando o campo B, mas o foco já foi enviado para o campo C.
Entende o meu problema?
Espero ter sido claro,
[]s
Éberson
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/04/2011 13:36:38
|
leoviniga
JavaGuru
![[Avatar]](/images/avatar/a09c01b96ecd8b9f6ea4a4d7fd8cd92c.jpg)
Membro desde: 06/01/2011 14:04:49
Mensagens: 222
Localização: Curitiba
Offline
|
eberson_oliveira wrote:Espero ter sido claro
não foi muito hehe mas eu entendi porque não está dando certo....o que eu não entendi é porque você não pode habilitar um campo antes de chamar o método que escolhe o foco
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/04/2011 13:41:36
|
eberson_oliveira
JavaGuru
![[Avatar]](/images/avatar/b0074757eb8e629f5a4c89a4b40b277e.jpg)
Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline
|
O problema é que não sou eu quem chama a validação nem a mudança de foco. Eu não mexi nesses eventos... Eu apenas escrevi um InputVerifier e coloquei no componente e escrevi uma lógica para identificar que é o próximo a receber o foco... quando esses meus dois componentes serão invocados não está sob o meu controle... é o java quem está controlando isso...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/04/2011 09:18:37
|
eberson_oliveira
JavaGuru
![[Avatar]](/images/avatar/b0074757eb8e629f5a4c89a4b40b277e.jpg)
Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline
|
Bom dia,
Depois de muito pesquisar e fuçar... acabei invertendo o processo padrão:
1 - Descobrir quem será o próximo a receber o foco
2 - Executar a validação de quem estava com o foco
3 - Mandar o foco para o componente descoberto no item 1
para:
1 - Executar a validação de quem estava com o foco
2 - Descobrir quem será o próximo a receber o foco
3 - Mandar o foco para o componente descoberto no item anterior..
Não sei se é uma boa solução... mas resolve o meu problema...
Fico grato pela atenção que tiveram com meu problema...
[]s
|
|
|
 |
|
|