[JSpinner] "Ouvindo" eventos de teclado.  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
Rafael Afonso
Virtual Machine Man
[Avatar]
Membro desde: 05/12/2002 16:03:43
Mensagens: 719
Localização: São Paulo/SP
Offline

Olá:

Estou fazendo um teste com JSpinner. Quando clico em "Seta para Cima" ou em "Seta para Baixo" o valor do JSpinner é incrementado ou decrementado em uma unidade. Meu objetivo final é "acelerar" a variação do valor: Quando clicar CTRL + "Seta para Cima" ou CTRL + "Seta para Baixo" o valor deve ser incrementado ou decrementado em 10 unidades, por exemplo. Entretanto as coisas não estão saido como esperado. Se eu Adicionar um KeyListener para o JSpinner nada acontece. Tentei ainda usar este exemplo e este outro no Example Depot (outrora Java Alamanac), usando KeyStroke mas de novo não aconteceu nada. Abaixo, segue-se o código de teste que fiz (feito no NetBeans 6.8 ):

No construtor do JFrame mando imprimir os KeyStrokey registrados. O que aparece é

[ctrl pressed UP, ctrl pressed KP_UP, ctrl pressed DOWN, ctrl pressed KP_DOWN, pressed UP, pressed KP_UP, pressed DOWN, pressed KP_DOWN]

Bem, alguém tem idéia do que está faltando para que o JSpinner consiga ouvir "meus" eventos?

Grato,

Rafael U. C. Afonso

Rafael Ubiratam Clemente Afonso
---------------------------------------
GitHub
ScalaFX
LinkedIn
[MSN]
danielfroes
Entusiasta Java

Membro desde: 23/03/2010 12:08:57
Mensagens: 22
Offline

Que bagunça o NetBeans faz no código, eu nunca tinha visto hehehe.

Bom, vou dar uma idéia, acho que pode funcionar.

Crie 2 SpinnerModel do tipo SpinnerNumberModel, um com incremento de 1 e outro com 10, assim:

SpinnerModel spnModel1 = new SpinnerNumberModel(0,null,50,1);
SpinnerModel spnModel10 = new SpinnerNumberModel(0,null,50,10);

Quando o CTRL for pressionado (keyPressed) você seta o model para spnModel10:
spnValor.setModel(spnModel10);

Quando o CTRL for solto (keyReleased) você seta o model para spnModel1;
spnValor.setModel(spnModel1);

Não testei, só pensei na solução... espero que ajude!
Rafael Afonso
Virtual Machine Man
[Avatar]
Membro desde: 05/12/2002 16:03:43
Mensagens: 719
Localização: São Paulo/SP
Offline

danielfroes wrote:
Que bagunça o NetBeans faz no código, eu nunca tinha visto hehehe.

De fato gostava mais da forma que o Visual Editor do Eclipse organizava o código. Principalmente ele não tem essas frescuras de regiões de edição proibida. Infelizmente ele não é tão sofisticado quanto o Matisse do NB e no momento está com o desenvolvimento estagnado.
danielfroes wrote:
Quando o CTRL for pressionado (keyPressed) você seta o model para spnModel10:

Aí que está todo o problema: Não consigo fazer com que o Spinner "ouça" o teclado. O comportamento padrão do componente é que quando você teclar seta p/cima ou seta p/baixo, o spinner incremente ou decremente em uma unidade. Tentei fuçar no código original do JSpinner mas não consegui descobrir onde é injetado este comportamento.
Quanto a criar dois modelos diferentes, não é necessário. Criei um MouseWheelListtener que quando você usa a roda do mouse o valor do Spinner é incrementado ou decrementado. Mas se junto com a roda você mantém clicado o botão direito do mouse, você pode variar o valor em dez unidade ou mais (você pode configurar o valor desse passo estendido).
danielfroes wrote:
Não testei, só pensei na solução... espero que ajude!

Obrigado de qualquer forma.

Rafael Ubiratam Clemente Afonso
---------------------------------------
GitHub
ScalaFX
LinkedIn
[MSN]
danielfroes
Entusiasta Java

Membro desde: 23/03/2010 12:08:57
Mensagens: 22
Offline

Entendi o seu problema agora Rafael, fiz uns testes e também não consegui fazer o keylistener funcionar...
O JSpinner é meio estranho, eu também to apanhando pra usar ele, quero desabilitar o editor dele, permitindo que o valor seja alterado apenas pelas setas. Se eu usar setEnable(false) ele desabilita as setas também, tentei desabilitar só o editor mas também não fez nada... Parece tão simples de usar
ambuzr
JavaChild
[Avatar]

Membro desde: 03/06/2008 16:53:41
Mensagens: 106
Offline

ei nao falem mau do meu Netbeans ein, amo ele de montao kkkkk

moleza cara, coloca isso depois de

initComponents();

do codigo do Netbeans




vlwwwwwwwwww

java & linux, apanhando mais aprendendo

---------------------------------------------------
Quando rebaixas alguem, automaticamente voce se curva para rebaixar portanto voce tambem es rebaixado, porem quando levantas alguem automaticamente voce tambem es levantado
Rafael Afonso
Virtual Machine Man
[Avatar]
Membro desde: 05/12/2002 16:03:43
Mensagens: 719
Localização: São Paulo/SP
Offline

ambuzr wrote:ei nao falem mau do meu Netbeans ein, amo ele de montao kkkkk

moleza cara, coloca isso depois de

initComponents();

do codigo do Netbeans




vlwwwwwwwwww

ambuzr:

Funcionou perfeitamente. A diferença é que coloquei o código não depois do initComponents() mas sim dentro. Mais especificamente na parte em que o NB a personalização do código depois da inicialização do componente.

Grato,

Rafael U. C. Afonso

Rafael Ubiratam Clemente Afonso
---------------------------------------
GitHub
ScalaFX
LinkedIn
[MSN]
danielfroes
Entusiasta Java

Membro desde: 23/03/2010 12:08:57
Mensagens: 22
Offline

Boa dica ambuzr! Eu estava tentando pegar esse TextField! Com isso consegui resolver outro problema que eu tinha (desabilitar só a TextField do Spinner). Valeu!
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team