2017-06-14 4 views
0

J'ai donc JTextPane et j'ai ajouté un keyListener, comme ça, je peux savoir si le bouton Enter a été pressé:Ajouter un caractère (ou une chaîne) lorsque vous appuyez sur Entrée (dans un JTextPane)

JTextPane textPane = new JTextPane(); 

textPane.addKeyListener(new KeyListener() { 
     @Override 
     public void keyTyped(KeyEvent e) { 
     } 
     @Override 
     public void keyPressed(KeyEvent e) { 

      if(e.getKeyCode() == KeyEvent.VK_ENTER){ 
       // add there the code to add a character to the textPane! 
      } 
     } 
     @Override 
     public void keyReleased(KeyEvent e) { 
     } 
    }); 

Mais maintenant je suis bloked, comment ajouter un caractère '}' au panneau de texte?
(nulle part, juste après la position du curseur, à ce qui suit ...)

+4

N'utilisez jamais un KeyListener avec un composant de texte tel que JTextPane. Si vous voulez écouter ENTER, utilisez Key Bindings - ou un DocumentListener ou peut-être ici un DocumentFilter. –

+0

Cette question a la solution que vous cherchez, je crois https://stackoverflow.com/questions/4059198/jtextpane-appending-a-new-string –

Répondre

2

Comme suggéré dans les commentaires ci-dessus par @HovercraftFullOfEels, ne pas utiliser un KeyListener pour écouter la entrer clé, utilisez plutôt KeyBindings ou un DocumentListener. Voici un answer de Hovercraft qui utilise des liaisons de touches, bien qu'il ne soit pas avec un JTextPane mais vous pouvez prendre l'idée générale à partir de là.

Pour ajouter du texte dans la position de caret, vous pouvez essayer JTextPane#replaceSelection(String) qui des docs:

remplace le contenu actuellement sélectionné avec le nouveau contenu représenté par la chaîne donnée. S'il n'y a pas de sélection, cela correspond à une insertion du texte. S'il n'y a pas de texte de remplacement, cela revient à supprimer la sélection en cours. Le texte de remplacement aura les attributs actuellement définis pour l'entrée au point d'insertion. Si le document n'est pas éditable, bip et retour.