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?
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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) { } });
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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
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
SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
Di questo libro e degli altri (blog personale di recensioni libri) | NO M.P. TECNICI
In italiano non mi è molto chiaro
Inoltre:
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?codice:keyMap.addActionForKeyStroke(KeyStroke.getKeyStroke("ENTER"), new AbstractAction(){ @Override public void actionPerformed(ActionEvent e) { } });
Ultima modifica di linux_r; 11-07-2014 a 13:19