2010-07-06 2 views
0

J'écris un éditeur de texte (en java) où j'utilise un JTextArea pour l'édition de texte principal et je mets le texte dans un stringbuilder.Récupérer les premières et dernières valeurs d'index du texte surligné dans un JTextArea

Lorsque je surligne le texte et que je fais quelque chose comme supprimer ce bloc de texte, je veux le mettre à jour dans le stringbuilder. Donc, ma question est, y at-il un moyen d'obtenir le premier et le dernier index du texte en surbrillance dans le stringbuilder?

Merci.

Répondre

1

Vous pouvez les synchroniser en utilisant un DocumentListener comme ci-dessous. Cependant, je recommande fortement de repenser l'approche que vous essayez de prendre ici. Il semble que vous essayez d'utiliser un StringBuilder externe en tant que "modèle" pour votre JTextArea, mais le document est le modèle. Donc, je ne vois pas quand ce serait une bonne idée.

public static void main(String[] args) { 
    JTextArea area = new JTextArea(); 
    final StringBuilder builder = new StringBuilder(); 
    area.getDocument().addDocumentListener(new DocumentListener() { 
     @Override 
     public void removeUpdate(DocumentEvent e) { 
      builder.delete(e.getOffset(), e.getOffset() + e.getLength()); 
      System.out.println("Removed " + e.getLength() + " chars from SB"); 
     } 

     @Override 
     public void insertUpdate(DocumentEvent e) { 
      try { 
       builder.insert(e.getOffset(), 
         e.getDocument().getText(e.getOffset(), e.getLength())); 
       System.out.println("Inserted " + e.getLength() + " chars into SB."); 
      } catch (BadLocationException ble) { 
       ble.printStackTrace(); 
      } 
     } 

     @Override public void changedUpdate(DocumentEvent e) { /* no-op */ } 
    }); 

    final JFrame frame = new JFrame("DocumentListener Test"); 
    frame.add(area); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowClosing(WindowEvent e) { 
      System.out.println("Final SB contents:"); 
      System.out.println(builder.toString()); 
     } 
    }); 
    frame.pack(); frame.setVisible(true); 
} 
+0

Merci beaucoup pour la réponse et le conseil. Il est temps pour moi d'aller lire sur le DocumentListener. –

1

Si vous supprimez le texte JTextArea, ne pouvez pas vous appeler juste getText(); sur votre JTextArea pour obtenir le texte mis à jour?

Je suppose que (dans votre Stringbuilder) vous gardez un enregistrement de la chaîne qui n'a pas été supprimée. Si vous souhaitez conserver un enregistrement des éléments supprimés, vous pouvez comparer ce qui était dans le JTextArea à l'origine à celui qui a été mis à jour pour savoir ce qui a été supprimé. Vous pouvez le faire en découvrant à quel index l'original et les versions mises à jour diffèrent et où ils correspondent après.

+0

Merci pour la réponse. –

Questions connexes