2015-04-05 123 views
1

此代码替换为新的像这样的选择的话:如何突出显示替换所选单词的单词?

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

什么是设置的新词,以黄色背景的最简单的方法?

+0

两个问题1.为什么,2,为什么没有在文档搜索,我敢肯定,甲骨文教程 - 如何使用TextComponents包含有关搜索和亮点文件 – mKorbel 2015-04-05 18:28:50

回答

1

您可以使用属性:

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); 

查找/替换逻辑检查:Find/Replace, Highlight Words。您将修改突出显示的代码以使用属性。

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

匹配工作代码示例'什么是最简单的如何将新单词的背景设置为黄色?' - 此解决方案不符合该要求。这将改变文本窗格中所有单词的背景。例如,如果您在上面的代码片段中将“0”更改为“1”。即使没有改变,所有的“-1”值也会被突出显示。此外,由于我在我的答案中找到的链接中提供的原因,此代码无法在Windows计算机上工作。 – camickr 2015-04-06 00:42:04

+0

但它适用于我的情况。 – lol 2015-04-06 10:12:34

+0

@lol,你的意思是它适用于你的情况?你甚至尝试过我建议的吗?将上面的代码复制到文本窗格中,然后将“0”替换为“1”。 “-1”的“1”不应该突出显示,因为您的查找/替换逻辑不会更改该值。 – camickr 2015-04-08 15:46:03