2013-05-31 1 views
0

Я использую JEditorPane для отправки html-файла на моем компьютере, этот html имеет ссылку с именем «skip to main content», которая приведет пользователя к середине той же страницы; но я хочу, чтобы он автоматически прокручивался до середины страницы, только когда диалог был установлен видимым, я попробовал 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

 Смежные вопросы

  • Нет связанных вопросов^_^