This is an old patch that enables basic HTML loading from URLs in JEditorPanes via setPage(URL).
2006-10-18 Roman Kennke <[EMAIL PROTECTED]> * javax/swing/JEditorPane.java (page): Removed field. The page is now stored in the correct document property. (getPage): Fetch page URL from document property. (read): Set the document for this JEditorPane. Use a Reader for reading in the document. (setPage): Call getStream() to get the stream from which we read. Fire property change. Store page in document property. /Roman
Index: javax/swing/JEditorPane.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/JEditorPane.java,v retrieving revision 1.35 diff -u -1 -5 -r1.35 JEditorPane.java --- javax/swing/JEditorPane.java 31 Aug 2006 19:25:07 -0000 1.35 +++ javax/swing/JEditorPane.java 18 Oct 2006 09:54:59 -0000 @@ -496,31 +496,30 @@ */ public ViewFactory getViewFactory() { return new ViewFactory() { public View create(Element el) { return new WrappedPlainView(el); } }; } } private static final long serialVersionUID = 3140472492599046285L; - private URL page; private EditorKit editorKit; boolean focus_root; // A mapping between content types and registered EditorKit types static HashMap registerMap; // A mapping between content types and used EditorKits HashMap editorMap; public JEditorPane() { init(); setEditorKit(createDefaultEditorKit()); } @@ -750,31 +749,31 @@ * * @return <code>true</code> when a Viewport should force the width of * this component to match the viewport width */ public boolean getScrollableTracksViewportWidth() { // Tests show that this returns true when the parent is a JViewport // and has a width > minimum UI width. Container parent = getParent(); return parent != null && parent instanceof JViewport && parent.getWidth() > getUI().getMinimumSize(this).width; } public URL getPage() { - return page; + return (URL) getDocument().getProperty(Document.StreamDescriptionProperty); } protected InputStream getStream(URL page) throws IOException { return page.openStream(); } public String getText() { return super.getText(); } public String getUIClassID() { @@ -787,34 +786,36 @@ } protected String paramString() { return "JEditorPane"; } /** * This method initializes from a stream. */ public void read(InputStream in, Object desc) throws IOException { EditorKit kit = getEditorKit(); if (kit instanceof HTMLEditorKit && desc instanceof HTMLDocument) { - Document doc = (Document) desc; + HTMLDocument doc = (HTMLDocument) desc; + setDocument(doc); try { - kit.read(in, doc, 0); + InputStreamReader reader = new InputStreamReader(in); + kit.read(reader, doc, 0); } catch (BadLocationException ex) { assert false : "BadLocationException must not be thrown here."; } } else { Reader inRead = new InputStreamReader(in); super.read(inRead, desc); } } /** * Establishes a binding between type and classname. This enables @@ -909,39 +910,40 @@ * Sets the current URL being displayed. */ public void setPage(String url) throws IOException { setPage(new URL(url)); } /** * Sets the current URL being displayed. */ public void setPage(URL page) throws IOException { if (page == null) throw new IOException("invalid url"); - try - { - this.page = page; - getEditorKit().read(page.openStream(), getDocument(), 0); - } - catch (BadLocationException e) + URL old = getPage();; + InputStream in = getStream(page); + if (editorKit != null) { - // Ignored. '0' is always a valid offset. + Document doc = editorKit.createDefaultDocument(); + doc.putProperty(Document.StreamDescriptionProperty, page); + read(in, doc); + setDocument(doc); } + firePropertyChange("page", old, page); } /** * Sets the text of the JEditorPane. The argument <code>t</code> * is expected to be in the format of the current EditorKit. This removes * the content of the current document and uses the EditorKit to read in the * new text. This allows the EditorKit to handle the String rather than just * inserting in plain text. * * @param t the text to display in this JEditorPane */ public void setText(String t) { try {