Originariamente inviato da andbin
Tecnicamente sempre con keyPressed(). Solo che la questione è più particolare, perché i vari Ctrl, Alt ecc.. sono dei "modificatori" trattati in modo più specifico.

Se come sequenza fai: premo Ctrl, premo A, rilascio A, rilascio Ctrl, tecnicamente ottieni come invocazioni:

keyPressed con e.getKeyCode() = VK_CONTROL
keyPressed con e.getKeyCode() = VK_A
keyReleased con e.getKeyCode() = VK_A
keyReleased con e.getKeyCode() = VK_CONTROL

E i keyPressed si possono ripetere se tieni premuto, ovviamente.

Se devi solo "sentire" il tasto Ctrl (come se fosse un qualunque altro tasto), lo tratti nei metodi sopra come "key code".
Se devi trattarlo come "modificatore" di un altro tasto, non devi tenerti tu nessun "flag" perché avevi trovato il VK_CONTROL prima! Infatti KeyEvent ha i metodi:

- isControlDown() / isAltDown() / ecc.... isXXXDown()
- getModifiers() / getModifiersEx() per ottenere le combinazioni di flag relative a pulsanti del mouse e modificatori Ctrl ecc...

Per essere precisi, con DocumentListener non senti di per sé le pressioni dei tasti .... ricevi notifica delle modifiche, in generale, al Document, che possono avvenire in svariati modi: digitazione dell'utente, azione di "incolla", modifica da codice direttamente sul Document o attraverso il componente di testo (es. setText() ecc...).
Grazie per la risposta!

E per gestire le "scorciatoie da tastiera" sui JMenuItem? Devo solamente creare il JMenuItem e passare al costruttore la costante?

Ho anche un altra domanda, ho fatto in modo, come detto sopra, che ad ogni digitazione nel JTextPane il colore della "linguetta" (o per meglio dire, del testo della linguetta) diventi rosso. Non ho trovato delle vere e proprie guide da seguire, per cui mi sono rivolto al tutorial della Sun e alla descrizione della classe..sta di fatto che ci ho capito poco..e nel metodo insertString() ho fatto quanto segue:

codice:
document.insertString(document.getLength()," ",document.getStyle("color"));
Come si evince, in questo modo, ad ogni selezione del colore viene lasciato uno spazio.. c'è un modo per evitarlo?
Per lo stile grassetto, ho scritto questo invece:

codice:
private void addStylesToDocument(StyledDocument document, String format) {
  try {
    Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
    Style s = document.addStyle("Bold",def);
	  
    StyleConstants.setBold(s,true);
    document.insertString(document.getLength()," ",document.getStyle("Bold"));
    ed.getPane().setCaretPosition(document.getLength());
  } catch(BadLocationException ex) {}
}
da quello che sono riuscito a capire (e che immagino)
codice:
StyleConstants.setBold(s,true);
sostituendo il "true" con "false", farei in modo che il testo torni senza il grassetto.
La domanda è.. come faccio a far in modo che, alla prima pressione del bottone "Grassetto" il testo diventi grassetto (quindi true), e alla pressione successiva diventi "false"?

PS: Ho visto i metodi isBold() ecc. penso facciano al caso mio.. solo che non ho capito bene come usarli.

Grazie mille!!