001    package escjava.gui;
002    import javax.swing.*;
003    import javax.swing.text.html.*;
004    import javax.swing.event.*;
005    
006    import java.net.*;
007    import java.util.jar.*;
008    
009    public class EscHtml extends JFrame {
010    
011        final JEditorPane editor;
012        final JScrollPane scroll;
013        private EscHtml() {
014            editor = new JEditorPane();
015            scroll = new JScrollPane(editor);
016            editor.setContentType("text/html");
017            editor.setEditable(false);
018            editor.addHyperlinkListener(new Hyperactive());
019            getContentPane().add(scroll);
020        }
021    
022        /** Launches a non-editable HTML display window. */
023        public static EscHtml make(String title, String filename, JFrame jf,
024                                            int x, int y, int w, int h) {
025            try {
026                java.net.URL url =
027                  GUI.class.getClassLoader().getResource(filename);
028                return new EscHtml(title,url,x,y,w,h);
029            } catch (Exception e) {
030                JOptionPane.showMessageDialog(jf,
031                    "Internal error - Could not find html file " + 
032                    filename + ":" + System.getProperty("line.separator")
033                    + e);
034            }
035            return null;
036        }
037    
038        // Displays a local file that might be in the jar file
039        public EscHtml(String title, java.net.URL url, int x, int y, int w, int h) 
040                                            throws java.io.IOException {
041            this();
042            setTitle(title);
043            editor.setPage(url);
044            //pack();
045            if (w != 0) setSize(w,h);
046            setLocation(x,y);
047        }
048    
049        public void showit() {
050            FrameShower.show(this);
051        }
052    
053        static class Hyperactive implements HyperlinkListener {
054    
055            public void hyperlinkUpdate(HyperlinkEvent e) {
056                if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
057                    JEditorPane pane = (JEditorPane) e.getSource();
058                    if (e instanceof HTMLFrameHyperlinkEvent) {
059                        HTMLFrameHyperlinkEvent  evt = (HTMLFrameHyperlinkEvent)e;
060                        HTMLDocument doc = (HTMLDocument)pane.getDocument();
061                        doc.processHTMLFrameHyperlinkEvent(evt);
062                    } else {
063                        try {
064                            pane.setPage(e.getURL());
065                        } catch (Throwable t) {
066                            t.printStackTrace();
067                        }
068                    }
069                }
070            }
071        }
072    }