2012-11-19 29 views
1

我必须突出显示JEditorPane中某个单词的所有匹配项。为此,我使用以下代码:在JEditorPane中突出显示一个单词

try 
{   
javax.swing.text.DefaultHighlighter.DefaultHighlightPainter highlightPainter = 
    new javax.swing.text.DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW); 
textPane.getHighlighter().addHighlight(startPos, endPos, 
highlightPainter); 
} 
catch(Exception ex) 
{ 
} 

但是我怎样才能给一个单词的索引位置呢?

我正在阅读文件中的内容,但它也正在阅读HTML标签,它正在干扰文字索引。

回答

10

基本上,你应该能够行走寻找匹配(ES),你需要的文件......

enter image description here

public class TestEditorPane01 { 

    public static void main(String[] args) { 
     new TestEditorPane01(); 
    } 

    public TestEditorPane01() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JEditorPane editor = new JEditorPane(); 
       try { 
        editor.setPage(new File("Test.html").toURI().toURL()); 
       } catch (Exception exp) { 
        exp.printStackTrace(); 
       } 

       JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new JScrollPane(editor)); 
       frame.setSize(400, 400); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 

       Document document = editor.getDocument(); 
       try { 
        String find = "Method"; 
        for (int index = 0; index + find.length() < document.getLength(); index++) { 
         String match = document.getText(index, find.length()); 
         if (find.equals(match)) { 
          javax.swing.text.DefaultHighlighter.DefaultHighlightPainter highlightPainter = 
            new javax.swing.text.DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW); 
          editor.getHighlighter().addHighlight(index, index + find.length(), 
            highlightPainter); 
         } 
        } 
       } catch (BadLocationException ex) { 
        ex.printStackTrace(); 
       } 

      } 
     }); 
    } 
} 

这将遍历整个文档并突出显示所有匹配项。这也是sensitve匹配的情况;)

+0

其中包文档类可用。 – adesh

+0

'javax.swing.text' – MadProgrammer

+0

ok但是当我调用document.getText(0,document.getLength());它没有返回任何东西。 – adesh

3

这里是我的情况下,需要突出EditorPane一个搜索词:

// text in EditPane 
    String text = rSyntaxTextArea.getText(); 
    if (text != null && !"".equals(filterText.getText())) { 
     Highlighter hilit = new RSyntaxTextAreaHighlighter(); 
     rSyntaxTextArea.setHighlighter(hilit); 
     for (int index = text.toUpperCase().indexOf(
       // searched text 
       filterText.getText().toUpperCase()); index >= 0; index = text 
       .toUpperCase().indexOf(
         filterText.getText().toUpperCase(), index + 1)) { 
      int end = index + filterText.getText().length(); 
      HighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(
        Color.LIGHT_GRAY); 
      try { 
       hilit.addHighlight(index, end, painter); 
      } catch (BadLocationException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

希望有所帮助。

1

你可以做如下事情:

getHighlighter().addHighlight(start, end, 
     new DefaultHighlighter.DefaultHighlightPainter(Color.red));