2015-04-05 2 views
1

j'ai écrit une méthode qui recherche tous les mots textPane (nom textContent) qui sont les mêmes que la parole donnée dans TextField1 (le mot vous recherchez) et les reflets jaunes:Comment changer tous les mots surlignés dans jTextPane au mot donné dans jTextField?

private void findAlleActionPerformed(java.awt.event.ActionEvent evt) {           
    int j = 0; 
    int i = 0; 
    int index = 0; 
    String search = TextField1.getText(); 

    try{ 
     if(!TextField1.getText().isEmpty()){ 
      while(i != -1){ 
        i = textContent.getText().indexOf(search, j); 
       if(i == -1) 
        break; 
       if(evt.getSource() == findAll || evt.getSource() == findAllButton){ 
        textContent.select(i, i + search.length()); 
       } 
       Color c = Color.YELLOW; 
       Style s = textContent.addStyle("TextBackground", null); 
       StyleConstants.setBackground(s, c); 
       StyledDocument d = textContent.getStyledDocument(); 
       d.setCharacterAttributes(textContent.getSelectionStart(), textContent.getSelectionEnd() - textContent.getSelectionStart(), textContent.getStyle("TextBackground"), false); 
       j = i + search.length(); 
       index++; 
      } 
      if (index > 0){ 
       textContent.grabFocus(); 
       textContent.setCaretPosition(textContent.getText().indexOf(search, 0)); 
       if(evt.getSource() == findAll || evt.getSource() == findAllButton){ 
        status.setText("Term: " + TextField1.getText() + ". Number of apperances: " + index); 
       } 
      } else { 
       textContent.grabFocus(); 
       if(evt.getSource() == findAll || evt.getSource() == findAllButton){ 
        status.setText("Term " + search + " was not found."); 
       } 
      } 
     } 
    } catch (Exception e){ 
     status.setText("Error finding requested term."); 
     System.err.print(e); 
    } 
} 

Maintenant, je Je fais une autre méthode changeAllActionperformed() qui remplacerait TOUS les mots surlignés avec le mot donné en TextField2. J'ai essayé de le faire avec textContent.replaceSelection(TextField2.getText()); mais le problème est qu'il met le nouveau mot juste devant le premier mot highighted et il ne le supprime même pas. Et ce que je voudrais, c'est supprimer tous les mots surlignés et les remplacer tous par le nouveau mot de Textfield2. Comment je fais ça?

Répondre

1

Une raison pour laquelle cela ne peut pas être aussi simple?

String replaced = textContent.getText().replace(search, TextField2.getText()); 
textContent.setText(replaced); 
+0

Cela fonctionne! Merci beaucoup. Je ne connaissais pas l'existence de la méthode replace() :) – lol