2012-11-19 4 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

, 당신은 경기 (들) 당신이 필요로 찾고 문서를 걸을 수 있어야한다을 ...

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

      } 
     }); 
    } 
} 

전체 문서를 탐색하고 모든 일치 항목을 강조 표시합니다. 이것은 또한 민감한 일치입니다.)

+0

패키지 문서 클래스를 사용할 수 있습니다. – adesh

+0

'javax.swing.text' – MadProgrammer

+0

괜찮지 만 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)); 
관련 문제