Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Gestione Evento da tastiera.

    Sto cercando di associare l'evento "pressione del tasto INVIO" ad un evento già esistente, ovvero la pressione del JBotton 'Genera'.
    In particolare nel testo del JFrame ho inserito il seguente codice:

    codice:
    //crea pulsante
    generaButton = new JButton("Genera");
    
    //aggiunge il pulsante al pannello
    mpanel.add(generaButton);		
    				
    //associa un evento al bottone
    GeneraActionListener generaAction = new GeneraActionListener();
    		generaButton.addActionListener(generaAction);
    dove la classe privata GeneraActionListener è stata così strutturata:

    codice:
    private class GeneraActionListener  implements ActionListener {
            	
            	/**
            	* Costruttora per la gestione degli eventi del Bottone Genera
            	*/
            	public GeneraActionListener(){
            		
            	}//GeneraActionListener
            	
            	/**
            	* Gestisce l'evento del bottone Genera.
            	* @param event di tipo ActionEvent, il quale rappresenta l'evento di click sul bottone
            	*/
            	public void actionPerformed(ActionEvent event){
    			int k;
    											
    			vect.clear();				
                         	for(k=0; k<nNodeField.getValue(); k++){
                                    n = new RWMHost(k, minPField.getValue(), maxPField.getValue(), 
                                    		minVField.getValue(), maxVField.getValue());
                                    n.setId();
                                    if(k==0)
                                    	n.setStato(true);        
                                	vect.add(n);
                             }//for k
                               
                         	rwmpanel = new MRASimulationWindowPanel(lun, alt, vect);
                         	//impostando il layout a null il pannello si adatta alla grandezza desiderata
               	     	rwmpanel.setLayout(null);
        	  
    		     	int indiceRWM = tabbedPane.indexOfTab("Random Watpoint Model");
    
                         	//aggiorna i grafi
                         	tabbedPane.setComponentAt(indiceRWM,rwmpanel);
    
                         	
    			tabbedPane.setSelectedComponent(rwmpanel);	
            	}//actionPerformed
            	
            }//GeneraActionListener
    per gestire gli eventi da tastiera ho definito:

    codice:
    addKeyListener(new KeyHandler());
    la cui classe associata è:

    codice:
             /**
             	Gestisce gli eventi della tastiera.
             */
             private class KeyHandler implements KeyListener{
             	//gestisce l'evento della pressione di un tasto
             	public void keyPressed(KeyEvent event){
             		int keyCode = event.getKeyCode();
             		System.out.println("keyCode="+keyCode);
             	}//keyPressed
             	
             	//gestisce l'evento del rilascio di un tasto
             	public void keyReleased(KeyEvent event){}//keyreleased
             	
             	//gestisce l'evento della pressione di un tasto
             	public void keyTyped(KeyEvent event){}//keyPressed
             }//KeyHandler
    Atal punto, mi chiedo: Come posso associare l'evento della pressione del tasto INVIO con l'evento GeneraActionListener?
    Giuseppe SPECCHIO

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    prova questo!

    codice:
    public void keyPressed(KeyEvent e){
        if(e.getKeyCode() == KeyEvent.VK_ENTER) {
           System.out.println("Hai premuto il tasto INVIO"); }
    }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Anzitutto ti ringrazio della tempestiva risposta, ma il problema era associare l'evento GeneraActionListener al metodo keyPressed
    Giuseppe SPECCHIO

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    scusa, non avevo letto bene..
    tu vuoi fare in modo che premendo invio venga premuto il pulsante?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    yes! o comunque si verifichi l'evento associato al pulsante.
    Giuseppe SPECCHIO

  6. #6
    non ho letto tutto il codice ma dall ultima riga ho intuito che forse ti serve il metodo button.doclick(); prova..

  7. #7
    ok cosi funziona.

    ma, ad esempio, se ho un frame in cui ho costruito una form di inserimento col rispettivo
    bottone "inserisci", assegnando a input1.addKeyListener(this); il tasto invio mi funziona solo quando input1 ha il focus.

    come faccio visto che la mia form ha piu input?

    ho provato a impostare this.addKeyListener(this); e anche panel.addKeyListener(this); ma niente.

    come si può fare??

    spero di essermi spiegato bene

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Il KeyListener va implementato nel contenitore dei pulsanti e non nei pulsanti. Ovvio che se il contenitore non ha lo stato attivo, non riceve gli eventi.

    Potresti anche provare ad associarlo direttamente al contentPane() della finestra.

    Per il discorso precedente, senza emulare un doClick() è sufficiente che i metodi actionPerformed() e keyPressed() richiamino entrambi lo stesso metodo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    ho provato con:

    Container contentPane = getContentPane();
    contentPane.add(panel);
    contentPane.addKeyListener(this);

    é non va.
    oppure:

    Container contentPane = getContentPane();
    contentPane.add(panel);
    panel.setFocusable(true);
    panel.addKeyListener(this);

    se i campi sono vuoti funziona, ma appena clicco si sposta il focus e non va piu.

    come posso continuare?

  10. #10
    Qualcuno sa come si può fare?????

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.