2013-07-25 3 views
1

JScrollPane 안에 JEditoPane이 있습니다. 일부 사전 정의 된 토큰을 포함하는 텍스트 컨텐츠가 있습니다. 나는이 토큰의 위치를 ​​데이터베이스에 저장하고있다. JEditorPane에 텍스트 내용을 설정하면 토큰을 HTML로 포함합니다. 또한 내용을 형식화하기 위해 HTML 구분선을 추가합니다.JScrollPane에서 캐럿 위치 설정

이제 강조 표시된 토큰 중 하나로 스크롤하려고 할 때 문제가 발생합니다. setCaretPosition (int)를 사용하면 데이터베이스에 저장된 토큰의 시작 위치가 일치하지 않는 것으로 보입니다. JEditorPane Document의 내용이 HTML과 혼합되어 있기 때문일 수 있습니다.

JEditorPane 컨텐트에서 String을 검색 한 다음 문자열이 발견 된 캐럿 위치를 얻는 방법이 있습니까?

답변

0

문자열에 공통점이 있습니까? 그럴 경우 java.util.scanner 또는/및 java.util.regex.Matcher를 조합하여 사용할 수 있습니다. 당신이 필요로하는 것에 맞는 정규식을 얻도록하십시오. 문자열을 찾으면 첫 번째 문자의 indexOf를 가져 와서 캐럿 위치를 설정합니다.

Java Scanner

Java Matcher

1

그건 당신이 그것을 할 방법 (무시하지 모범 사례 사용)) -

public static void main(String[] args) { 

    final JEditorPane jEditorPane = new JEditorPane("text/html", "<h1>This is some header</h1>After this text would be the CARRET<br>This is some more text<br>And more"); 
    final JScrollPane jScrollPane = new JScrollPane(jEditorPane); 

    final JFrame jframe = new JFrame("HHHHHH"); 
    jframe.add(jScrollPane); 
    jframe.setSize(new Dimension(200, 200)); 
    jframe.setVisible(true); 

    final String text = jEditorPane.getText(); 
    final int index = text.indexOf("T"); 
    jEditorPane.setCaretPosition(index + 1); 

    while (true) { 
     try { 
      Thread.sleep(1000000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

그리고 그 결과입니다 :

enter image description here

을 너 슈울 d indexof의 결과를 DB에 저장합니다.

관련 문제