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 }