구성 요소가 실현 될 때까지 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();
}
});
}
}
이 작품은 나를 위해, 고마워. – user1657638