Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16
  1. #11
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Originariamente inviato da Alex'87
    http://java.sun.com/docs/books/tutor...eybinding.html
    Grazie Alex, adesso funziona nel modo corretto e con il minor dispendio di energie e di codice
    al volante son nervoso

  2. #12
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Rubox
    con il minor dispendio di energie e di codice
    Se volevi usare il key binding, ti bastava fare una ricerca sul forum e trovavi questo mio post.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #13
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Originariamente inviato da andbin
    Se volevi usare il key binding, ti bastava fare una ricerca sul forum e trovavi questo mio post.
    Avevo fatto una ricerca, come sempre prima di postare, ma mi era sfuggito.

    Colgo l'occasione per chiedere questo: nel link messo da Alex, il key binding viene richiamato per un "contenitore". Io come contenitore ho preso il JRootPane. E' corretto? Oppure quei metodi getInputMap e getActionMap si devono richiamare per un altro oggetto, per ottenere che quando si preme invio su di un JFrame, qualunque sia il componente con il focus, la funzione richiamata sia quella del key binding?
    al volante son nervoso

  4. #14
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Rubox
    il key binding viene richiamato per un "contenitore".
    Non mi pare parli di "contenitori". Parla di "componenti" e infatti: Each JComponent has one action map and three input maps..

    Originariamente inviato da Rubox
    Io come contenitore ho preso il JRootPane. E' corretto? Oppure quei metodi getInputMap e getActionMap si devono richiamare per un altro oggetto, per ottenere che quando si preme invio su di un JFrame, qualunque sia il componente con il focus, la funzione richiamata sia quella del key binding?
    A questo punto mi sorge il dubbio che non hai compreso come funziona il key binding.

    Come ho anche riportato prima, ogni componente ha 3 InputMap e 1 ActionMap.

    Un InputMap fornisce una "mappatura" tra 1 KeyStroke e 1 qualunque "oggetto" (Object, che poi generalmente viene usato un String)

    Un ActionMap fornisce una "mappatura" tra quel qualunque oggetto e 1 Action (che estende ActionListener quindi ha il actionPerformed che esegue "qualcosa" cioè la azione vera e propria).

    Per un JButton per default c'è una mappatura nel InputMap WHEN_FOCUSED del tipo:

    KeyStroke per spazio premuto ---> "pressed"
    KeyStroke per spazio rilasciato ---> "released"

    E nella ActionMap del JButton c'è una mappatura:

    "pressed" ---> una certa Action per la pressione
    "released" ---> una certa Action per il rilascio

    Io nell'esempio che avevo postato ho semplicemente aggiunto una coppia di mappature "a monte" (quindi nel InputMap) per gestire l'INVIO.

    Quindi per tornare alla tua domanda se va bene usare il JRootPane. Beh, dipende. Se usavi la sua InputMap WHEN_ANCESTOR_OF_FOCUSED_COMPONENT e impostavi una "tua" Action, allora potevi fare "qualcosa" quando viene premuto INVIO qualunque sia il componente che ha il focus!!

    codice:
    JRootPane rootPane = getRootPane();
    
    InputMap im = rootPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
    
    im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false), "miaAzione");
    
    ActionMap am = rootPane.getActionMap();
    
    am.put("miaAzione", new AbstractAction() {
        public void actionPerformed(ActionEvent e) {
            System.out.println("Ho premuto invio su un qualunque componente!!!");
        }
    });
    Più chiaro?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #15
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Beh è il codice che ho scritto per fare questa operazione.
    Non ho capito bene il significato delle costanti WHEN_ANCESTOR_OF_FOCUSED_COMPONENT e le altre.
    Mi leggo un po' di documentazione e poi al massimo mi rifaccio vivo.

    Sul fatto che non abbia capito il key binding, beh qualcosina sì.


    PS: volevo scrivere componente e m'è uscito contenitore.
    al volante son nervoso

  6. #16
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Rubox
    Non ho capito bene il significato delle costanti WHEN_ANCESTOR_OF_FOCUSED_COMPONENT e le altre.
    WHEN_FOCUSED = Quando il componente ha il focus

    WHEN_ANCESTOR_OF_FOCUSED_COMPONENT = Quando il componente è quello con il focus oppure contiene il componente che ha il focus. "contiene" nel senso proprio che fa da contenitore, es. un JPanel che contiene un JButton.

    WHEN_IN_FOCUSED_WINDOW = Quando la finestra dove c'è il componente ha il focus oppure la finestra contiene il componente con il focus.

    E c'è una sequenza che viene usata per scansionare i vari InputMap.
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.