Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    25

    JTextField & Keylistener

    Ciao a tutti,
    ho questo problema:
    Ho aggiunto il KeyListener al mio JTextField e quando insreisco un testo e confermo, si scatena un evento da me programmato. Fin qui tutto ok. Ma se faccio il setText("Ciao"); Naturalmente non si scatena l'evento keyPressed

    codice:
    myTextField.addKeyListener(new KeyListener(){ 				
        public void keyPressed(KeyEvent e) {
            if(e.getKeyCode() == KeyEvent.VK_ENTER){
    ...
    come posso fare per invocare il KeyEvent con il setText?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Ovviamente, invocare setText() non comporta la pressione di alcun tasto.
    Una soluzione, banale, è quella di spostare tutto il codice che c'è all'interno del keyPressed() in un metodo (chiamiamolo "pippo()"). Il keyPressed() invocherà pippo() e lo stesso verrà fatto programmaticamente dopo l'invocazione di setText():

    codice:
    // Nel KeyListener
    public void keyPressed(KeyEvent ke) {
       if(e.getKeyCode() == KeyEvent.VK_ENTER){
          pippo();
       }
    }
    
    // Programmaticamente, dopo il setText:
    miaTextField.setText( ... );
    pippo();
    Ovviamente, il KeyListener ed il codice che invoca setText() devono, in qualche modo, avere visibilità sul metodo pippo().

    L'alternativa consiste nel sollevare programmaticamente l'evento e notificarlo a tutti i listener registrati.
    codice:
    KeyEvent ke = new KeyEvent(miaTextField, ...);
    for(KeyListener ke : miaTextField.getKeyListeners() {
       ke.keyPressed( ke );
    }
    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

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: JTextField & Keylistener

    Originariamente inviato da robyf1
    come posso fare per invocare il KeyEvent con il setText?
    KeyListener/Event e setText non hanno nulla a che fare tra di loro (di per sé).

    Una cosa che è possibile fare è registrare un DocumentListener sul Document contenuto nel JTextField. Questo ti permette di sapere quando "qualcosa" nel document cambia. E questo vale sia per l'input da tastiera, sia da setText, sia da una operazione di "paste" (incolla).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.