import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;

import java.awt.*;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.IOException;


public class HTMLPanel extends JPanel implements HyperlinkListener
{
	
	
JEditorPane html;

// Konstruktor
public HTMLPanel(){

	setLayout(new BorderLayout());
	
	try{
				
		URL url = new URL("http://www.k-kirsch.de/html/java/Java2Html.java.html");
		html = new JEditorPane(url);
		html.setEditable(false);
		html.addHyperlinkListener(this);
		JScrollPane scroller = new JScrollPane();
		JViewport vp = scroller.getViewport();
		vp.add(html);
		add(scroller, BorderLayout.CENTER);		
	}
	
	catch(MalformedURLException e) {
		System.out.println("Falsche Adresse: "+ e);
	}
	catch(IOException e){
		System.out.println("Netzwerkfehler: "+ e);
	}
	
}// Ende Konstruktor


	public void hyperlinkUpdate(HyperlinkEvent e)
	{
	    if(e.getEventType() == HyperlinkEvent.EventType.ACTIVATED)
	    {
		 linkActivated(e.getURL());
	    }												 
												 
	}// Ende von hyperlinkUpdate 
	
	// der Cursor im Editorfeld verändert
	protected void linkActivated(URL u){
		
		Cursor c = html.getCursor();
		Cursor waitCursor = Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR);
		html.setCursor(waitCursor);
		SwingUtilities.invokeLater(new PageLoader(u, c));
	}
	
	class PageLoader implements Runnable
	{
		
		URL url;
		Cursor cursor;
	
	PageLoader(URL u, Cursor c){
		url = u;
		cursor = c;		
	}
	
		public void run(){
		if(url == null) 
		{
			html.setCursor(cursor);
						
			Container parent = html.getParent();
			parent.repaint();
		}
		else 
		{
			Document doc = html.getDocument();
			try
			{
				html.setPage(url);
			}
			catch(IOException ioe)
			{
				html.setDocument(doc);
				getToolkit().beep();
			}
			finally
			{
				url = null;
				SwingUtilities.invokeLater(this);
			}
			
		} // else
	
		} // Ende von run
	
	} // ende PageLoader
}
