2013-05-31 6 views
0

JEditorPane을 사용하여 내 컴퓨터에 html 파일을 표시합니다.이 HTML에는 "주 내용으로 건너 뛰기"라는 링크가있어서 사용자를 동일한 페이지의 중간으로 유도합니다. 하지만 난 그것을 대화 상자가 표시되어 설정되어있는 automaticaly 스크롤 페이지의 중간에, 나는 JEditorPane.scrollToReference()를 시도, 그것은 작동하지 않습니다.JEditorPane가 지정된 HTML 링크로 스크롤하는 방법

아무도 도와 드릴까요?

답변

4

구성 요소가 실현 될 때까지 scrollToReference() 메서드를 호출 할 수 없습니다. 즉, 대화 상자가 압축되거나 표시됩니다.

가장 쉬운 방법은 scrollToReference() 메서드를 래핑하는 것입니다. SwingUitilities.invokeLater입니다. 비슷한 :

import java.awt.*; 
import java.awt.event.*; 
import java.beans.*; 
import javax.swing.*; 
import java.io.*; 
import java.net.*; 

public class EditorPaneScroll extends JPanel 
{ 
    private JEditorPane html; 

    public EditorPaneScroll() 
    { 
     setLayout(new BorderLayout()); 
     String text = "<html>one<br>two<br><a name =\"three\"></a>three<br>four<br>five<br>six<br>seven<br>eight<br>nine<br>ten</html>"; 
     StringReader reader = new StringReader(text); 

     html = new JEditorPane(); 
     html.setContentType("text/html"); 

     try 
     { 
      html.read(reader, null); 
     } 
     catch(Exception e) 
     { 
      System.out.println(e); 
     } 

     JScrollPane scrollPane = new JScrollPane(html); 
     scrollPane.setPreferredSize(new Dimension(400, 100)); 
     add(scrollPane); 

     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       html.scrollToReference("three"); 
      } 
     }); 
    } 

    private static void createAndShowUI() 
    { 
     JFrame frame = new JFrame("EditorPaneScroll"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new EditorPaneScroll()); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 
+0

이 작품은 나를 위해, 고마워. – user1657638