HTML page not displaying in Java Swing JTextPane

I am trying to experiment with non- JTextArea Swing text components, and in this code I am trying to display a very simple web page in JTextPane . I can read the web page and put it in a JTextPane document, as shown by printing a line that returns when getText called on my HTMLDocument , but nothing is displayed in JTextPane. It seems to me that I missed something basic. Thanks in advance.

My SSCCE:

 import java.awt.*; import java.io.IOException; import java.net.*; import javax.swing.*; import javax.swing.text.*; import javax.swing.text.html.*; @SuppressWarnings("serial") public class TestStyledDoc2 extends JPanel { public static final String GETTY_FILE = "http://www.d.umn.edu/~rmaclin/" + "gettysburg-address.html"; private HTMLEditorKit htmlKit = new HTMLEditorKit(); private HTMLDocument htmlDocument = (HTMLDocument) htmlKit.createDefaultDocument(); private JTextPane htmlPane = new JTextPane(htmlDocument); public TestStyledDoc2() { JScrollPane scrollPane1 = new JScrollPane(htmlPane); try { htmlPane.setEditorKit(htmlKit); URL gettyUrl = new URL(GETTY_FILE); htmlKit.read(gettyUrl.openStream(), htmlDocument, 0); System.out.println(htmlDocument.getText(0, htmlDocument.getLength())); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (BadLocationException e) { e.printStackTrace(); } scrollPane1.getViewport().setPreferredSize(new Dimension(400, 400)); setLayout(new BorderLayout()); add(scrollPane1, BorderLayout.CENTER); } private static void createAndShowUI() { JFrame frame = new JFrame("TestStyledDoc"); frame.getContentPane().add(new TestStyledDoc2()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } public static void main(String[] args) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { createAndShowUI(); } }); } } 
+4
source share
2 answers

Calling setEditorKit() removes your originally assigned document and replaces it with a new one. Just add another line immediately after restoring the correct document.

 htmlPane.setEditorKit(htmlKit); htmlPane.setDocument(htmlDocument); 

or reinstall the document from your text panel

 htmlPane.setEditorKit(htmlKit); htmlDocument = (HTMLDocument) htmlPane.getDocument(); 
+7
source

You do not need to know the actual editor kit or the document that is used:

 import java.awt.*; import java.io.*; import javax.swing.*; import javax.swing.text.*; public class EditorPaneLoad extends JFrame { public EditorPaneLoad() throws Exception { FileReader reader = new FileReader("a.html"); // JEditorPane editor = new JEditorPane(); JTextPane editor = new JTextPane(); editor.setContentType( "text/html" ); editor.setEditable( false ); editor.read(reader, null); System.out.println(editor.getText()); System.out.println("\n------------\n"); Document doc = editor.getDocument(); System.out.println(doc.getText(0, doc.getLength())); JScrollPane scrollPane = new JScrollPane( editor ); scrollPane.setPreferredSize( new Dimension(300, 200) ); getContentPane().add( scrollPane ); } public static void main(String[] args) throws Exception { EditorPaneLoad frame = new EditorPaneLoad(); frame.setDefaultCloseOperation( EXIT_ON_CLOSE ); frame.pack(); frame.setLocationRelativeTo( null ); frame.setVisible(true); } } 
+5
source

All Articles