Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [java] Key Listener

  1. #1

    [java] Key Listener

    Nell'interfaccia grafica che sto creando vorrei fare in modo che una certa azione si verifichi quando premo un tasto della tastiera.
    Ho associato l'ascoltatore al componente che mi interessa:


    conf.addKeyListener(new ascoltaTast());


    e creato la relativa classe dell'ascoltatore:



    class ascoltaTast implements KeyListener
    {
    public void keyPressed(KeyEvent e)
    {
    System.out.println("ciao"); //un esempio
    }
    public void keyReleased(KeyEvent e)
    {}
    public void keyTyped(KeyEvent e)
    {}
    }



    Però quando premo un qualsiasi tasto non succede niente. Qualcuno mi saprebbe gentilmente dire qualcosa a riguardo?
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    il componente a cui è associato il KeyListener deve avere il focus.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Usa gli accelerator se puoi, oppure ti tocca gestire la\le Input Map...
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  4. #4
    Quindi che dovrei scrivere?
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  5. #5
    Un bel po' di codice.

    Per prima cosa, invece di KeyListener, estendi la classe Action, o una delle sue derivate. In generale ti basta fornire il metodo actionPerformed (implementa ActionListener) e un costruttore che richiama quello della superclasse.
    Hai quindi una classe, chiamiamola AscoltaTastAction.

    Poi prelevi la Action Map del tuo componente:

    codice:
    ActionMap mappaAzioni = mioComponente.getActionMap();
    aggiungi alla mappa la tua nuova azione:

    codice:
    amap.put (chiave, AscoltaTastAction);
    La chiave puo' essere un oggetto qualsiasi, anche se di solito si usa una stringa.

    Ora preleva la Input Map del componente:

    codice:
    InputMap mappaTasti = mioComponente.getInputMap (JComponent.WHEN_IN_FOCUSED_WINDOW);
    Il parametro di getInputMap puo' assumere tre valori:

    • JComponent.WHEN_FOCUSED (funziona solo se c'e' il focus)
    • JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT (funzionano solo se il componente contiene (o e' lui stesso) l'oggetto che detieni il focus
    • JComponent.WHEN_IN_FOCUSED_WINDOW (associazioni di tasti che devono funzionare sempre)


    In caso di conflitto, il primo ha priorita' sul secondo che ha priorita' sul terzo.

    Ora devi associare il tasto con l'azione.
    Per fare questo generi un KeyStroke. Cio' puo' essere una cosa complicata. Ad esempio:

    codice:
    KeyStroke CTRL_B = KeyStroke.getKeyStroke(KeyEvent.VK_B, InputEvent.CTRL_MASK);
    Per fortuna, per le cose piu' semplici, esiste un altro factory che consente di generare questi oggetti da una semplice stringa:

    codice:
    KeyStroke CTRL_B = KeyStroke.getKeyStroke("ctrl B");
    Finalmente, associa il tasto all'azione, usando la stessa chiave che hai usato prima.

    codice:
    mappaTasti.put (CTRL_B, chiave);
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  6. #6
    Grazie delle informazioni!!
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

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.