2015-04-05 2 views
1

Ce code remplace les mots sélectionnés avec les nouveaux comme celui-ci:Comment mettre en surbrillance les mots qui ont remplacé les mots sélectionnés?

String search = jTextField1.getText(); 
String replaced = jTextPane.getText().replace(search, jTextField2.getText()); 
jTextPane.setText(replaced); 

Quelle est la meilleure façon de définir les arrière-plans des nouveaux mots au jaune?

+0

deux questions 1. Pourquoi, 2, pourquoi ne pas faire une recherche dans le document, je suis sûr que tutoriel Oracle - comment utiliser TextComponents contient exemple de code de travail sur les matchs de recherche et mettre en évidence dans le document – mKorbel

Répondre

1

Vous pouvez utiliser des attributs:

Simple AttributeSet changed = new SimpleAttributeSet(); 
StyleConstants.setForeground(changed, Color.RED); 
StyleConstants.setBackground(changed, Color.YELLOW); 

// Change attributes on some text 

StyledDocument doc = textPane.getStyledDocument(); 
doc.setCharacterAttributes(20, 4, changed, false); 

Pour rechercher/remplacer la logique de vérifier sur: Find/Replace, Highlight Words. Vous devez modifier le code de mise en évidence pour utiliser les attributs.

1
private void changeAllActionPerformed(java.awt.event.ActionEvent evt) { 
     int j = 0; 
     int i = 0; 
     int index = 0; 
     String search = jTextField1.getText(); 
     String replaced = jTextPane.getText().replace(search, jTextField2.getText()); 
     jTextPane.setText(replaced); 
     String newtext = jTextField2.getText(); 

     try{ 
      if(!jTextField2.getText().isEmpty()){ 
       while(i != -1){ 
         i = jTextPane.getText().indexOf(newtext, j); 
        if(i == -1) 
         break; 
        if(evt.getSource() == changeAll|| evt.getSource() == changeAllButton){ 
         jTextPane.select(i, i + newtext.length()); 
        } 
        Color c = Color.YELLOW; 
        Style s = jTextPane.addStyle("TextBackground", null); 
        StyleConstants.setBackground(s, c); 
        StyledDocument d = jTextPane.getStyledDocument(); 
        d.setCharacterAttributes(jTextPane.getSelectionStart(), jTextPane.getSelectionEnd() - jTextPane.getSelectionStart(), jTextPane.getStyle("TextBackground"), false); 
        j = i + search.length(); 
        index++; 
       } 
       if (index > 0){ 
        jTextPane.grabFocus(); 
        jTextPane.setCaretPosition(jTextPane.getText().indexOf(newtext, 0)); 
       } 
     } catch (Exception e){ 
      jLabel.setText("error"); 
      System.err.print(e); 
} 
+0

'Quel est le plus facile façon de définir les arrière-plans des nouveaux mots à jaune? '- cette solution ne satisfait pas cette exigence. Cela va changer l'arrière-plan de "tous" les mots dans le volet de texte. Par exemple, si vous remplacez "0" par "1" dans l'extrait de code ci-dessus. Toutes les valeurs "-1" seraient surlignées même si elles n'étaient pas modifiées. En outre, ce code ne fonctionnera pas sur les machines Windows pour la raison que j'ai fournie dans le lien trouvé dans ma réponse. – camickr

+0

Mais ça marche dans mon cas. – lol

+0

@lol, que voulez-vous dire que cela fonctionne dans votre cas? Avez-vous même essayé ce que j'ai suggéré? Copiez le code ci-dessus dans votre volet de texte, puis remplacez "0" par "1". Le "1" du "-1" ne doit PAS être surligné car votre logique de recherche/remplacement n'a pas changé cette valeur. – camickr