Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305

    JTextArea e keyListener

    Ho registrato un keylistener su una jtextarea in modo che quando premessi invio ,piuttosto che andare a capo nella jtextarea, avvenisse altro. Ma nulla, non succede proprio nulla . Sapreste aiutrami?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    Ho registrato un keylistener su una jtextarea in modo che quando premessi invio ,piuttosto che andare a capo nella jtextarea, avvenisse altro. Ma nulla, non succede proprio nulla . Sapreste aiutrami?
    Devi operare a livello di "key binding". Vedi cosa dicevo in questa discussione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Preciso una cosa (prima sono stato frettoloso, perché pensavo ad un'altra situazione con JTextArea).
    Un KeyListener su JTextArea lo puoi benissimo registrare e funziona anche senza problemi. Non è quello il punto (se non ti funziona, probabilmente c'è qualcosa che non va in quello che hai scritto, mostra il codice).
    Se non fai qualcosa di particolare con l'evento (mi riferisco al fatto di "consumare" l'evento con e.consume() ) però l'invio fa anche la sua operazione di newline.

    Il key binding in effetti è "a valle" di un key listener, insomma viene dopo ma permette di effettuare rimappature particolari come nel caso della discussione che ho linkato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    codice:
    this.textMsg.addKeyListener(new KeyListener(){
    
    
                    @Override
                    public void keyTyped(KeyEvent e) {
                        e.consume();
                        if(e.getKeyCode()==KeyEvent.VK_ENTER){
                            listener.actionPerformed(null);
                        }
                    }
    
    
                    @Override
                    public void keyPressed(KeyEvent e) {
                    }
    
    
                    @Override
                    public void keyReleased(KeyEvent e) {
                    }
                   
               });

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    codice:
    if(e.getKeyCode()==KeyEvent.VK_ENTER)
    Il keyTyped informa che un carattere è stato digitato .... non un qualunque keyCode.
    Il javadoc di getKeyCode() precisa anche:

    Returns:
    the integer code for an actual key on the keyboard. (For KEY_TYPED events, the keyCode is VK_UNDEFINED.)


    E comunque:
    listener.actionPerformed(null);
    non è particolarmente "bello".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Al posto di creare una classe interna anonima partendo da KeyListener, parti da KeyAdapter: fa la stessa cosa ma ti permette di ridefinire solo i metodi che ti interessano e non tutti.

    E comunque sì, listener.actionPerformed(null); è veramente orribile. Se proprio chiama il doClick() del pulsante o, meglio, estrai il contenuto di actionPerformed() in un metodo a parte.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    effettivamente ci quel listener.actionPerformed(null) non sarà bellissimo , ma mi ha fatto risparmiare tempo... e comunque funziona.. se avete altre idee per non dover riscrivere il metodo sono bene accette

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    effettivamente ci quel listener.actionPerformed(null) non sarà bellissimo , ma mi ha fatto risparmiare tempo... e comunque funziona.. se avete altre idee per non dover riscrivere il metodo sono bene accette
    Te ne ho date due di idee...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Se proprio chiama il doClick() del pulsante o, meglio, estrai il contenuto di actionPerformed() in un metodo a parte.
    In italiano non mi è molto chiaro

    Inoltre:
    codice:
    keyMap.addActionForKeyStroke(KeyStroke.getKeyStroke("ENTER"), new AbstractAction(){
    
    
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        
                    }
                    
                });
    Per far si che alla pressione di enter la jtextarea non vada su nuova linea. O meglio che non si sposti il cursore di una linea sotto.Che ne pensate?
    Ultima modifica di linux_r; 11-07-2014 a 13:19

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.