Evento sull'input

di il
3 risposte

Evento sull'input

Salve e buone feste a tutti.
ho fatto la parte grafica di un convertitore binario-decimale-ottale-esadecimale in java ma non riesco a capire come gestire l'input dell'utente nelle varie textbox riguardanti i vari formati numerici: voglio che a ogni cambiamento dell'input, tutti gli altri campi vengano modificati inserendo il valore convertito del campo attuale.
mi spiego meglio: se io inserisco il numero 2 nel textbox decimale, nel binario avrò immediatamente 10, nell'ottale e nell'esadecimale 2, senza che avvenga alcuna pressione di pulsanti, la conversione viene generata dal cambiamento dell'input.
ho provato con keytyped ma appena premo un tasto lancia svariate eccezioni senza nemmeno inserire la cifra nella textbox...
con action performed invece non fa nulla, mi pare di capire che l'input dentro una textbox non vada a chiamare quest'evento.
le eccezioni che mi lancia con keytyped sono queste:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at Convertitore$4.keyTyped(Convertitore.java:127)
	at java.awt.Component.processKeyEvent(Unknown Source)
	at javax.swing.JComponent.processKeyEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$500(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
i codici dei due eventi sono:
decimalValue.addActionListener(new ActionListener() 
{
	public void actionPerformed(ActionEvent arg0) 
	{
	    //binaryValue.setText(Integer.toString(decToBin(Integer.parseInt(decimalValue.getText()))));
				//octalValue.setText(Integer.toString(decToOct(Integer.parseInt(decimalValue.getText()))));
				//hexValue.setText(decToHex(Integer.parseInt(decimalValue.getText())));
	}
});
binaryValue.addKeyListener(new KeyAdapter() 
{
	@Override
	public void keyTyped(KeyEvent e) 
	{
				decimalValue.setText(Integer.toString(binToDec(Integer.parseInt(binaryValue.getText()))));
				//octalValue.setText(Integer.toString(decToOct(Integer.parseInt(decimalValue.getText()))));
				//hexValue.setText(decToHex(Integer.parseInt(decimalValue.getText())));
	}
});
(perdonate l'indentazione, con il tag code me la rovina tutta)
qualcuno sa aiutarmi?

3 Risposte

  • Re: Evento sull'input

  • Re: Evento sull'input

    Ho deciso di usare un keylistener alla fine poiché usando un document listener avevo due problemi:
    1) una volta risalito al nome del documento che ha generato l'evento, non sapevo come assegnare il valore convertito alle altre 3 textbox poiché non sapevo come chiamarle.
    2) con un document listener, l'evento insert update veniva evocato comunque anche se era il programma stesso a modificare il documento, quindi si sarebbe generato un loop infinito alla prima conversione.

    ho utilizzato un keyreleased, poiché utilizzando un keytyped il carattere appena inserito veniva ignorato dalla conversione (prima partiva la conversione, dopodiché il carattere veniva aggiunto alla textbox) e il copia-incolla lo prende lo stesso.

    grazie mille per l'aiuto.
  • Re: Evento sull'input

Devi accedere o registrarti per scrivere nel forum
3 risposte