12 marzo 2006

Cuatro líneas de código para hacer un navegador

Tuve la necesidad de ver ficheros html desde java. La opción típica consiste en arrancar el navegador por medio de la clase Runtime de java, pero se me ocurrió la posibilidad de ver cómo se podía hacer con componentes java. Estaba seguro de que java venía preparado para ello y que podría conseguirlo directamente o con muy poco código.

Efectivamente, aunque no entiendo del todo cómo, aquí están las cuatro líneas de código necesarias para hacerse un navegador.

En primer lugar tenemos la clase HTMLEditorKit, que aunque no sé qué hace, por el nombre imagino que es la clase que tiene todo lo necesario para interpretar los ficheros HTML. La instanciamos.

HTMLEditorKit kit = new HTMLEditorKit( );

Luego, en un JEditorPane, que es el que admite estas cosas, le decimos que su tipo de texto va a a ser HTML y le pasamos el editor kit este

JEditorPane editor = new JEditorPane();
editor.setEditorKitForContentType("text/html", kit );

Con esto ya lo tenemos todo preparado, salvo un pequeño detalle. Si al editor no le decimos nada, es editable, se puede modificar la página web. No es eso lo que quiero, así que lo hago no editable.

editor.setEditable( false );

Finalmente, basta con decirle qué página queremos que muestre

editor.setPage ("file:/unapagina.html");

Ya está, con esto se ve la página html, con sus fotos, frames y demás en nuestro editor.

Lo único que los hiperenlaces todavía no funcionan al hacer click en ellos. Debemos hacer un poco de código más.

Lo primero es decirle al HTMLEditorKit que se suscriba a los eventos de ratón sobre la página html, que los traduzca y nos los pase. Eso se hace con una simple línea de código

kit.install( editor );

Y ahora, tenemos que suscrbirnos nosotros a los eventos de ratón sobre los hiperenlaces para cambiar nosotros la página. Es importante el install() anterior, porque si no el editor no avisará a sus HyperlinkListener. El código es este

editor.addHyperlinkListener( listener );

donde listener es una instancia de una clase como la siguiente

HyperlinkListener listener = new HyperlinkListener( )
{
public void hyperlinkUpdate( HyperlinkEvent e )
{
try
{
// Se comprueba si se ha hecho click
if( e.getEventType( ) == HyperlinkEvent.EventType.ACTIVATED )
{
// se obtiene la url a la que apunta el hiperlink
if( e.getURL( ) != null )
{
// Se pasa la página al editor
editor.setPage( e.getURL( ) );
}
}
}
catch( Exception e2 )
{
e2.printStackTrace( );
}
}
};

Aquí hay que tener un poco de cuidado. Al suscribirnos, se nos avisará cada vez que el ratón haga cualquier cosas sobre el hiperenlace, incluso aunque simplemente pase sobre él, sin hacer click. Por ello la necesidad del primer if, para ver si el hiperenlace se ha ACTIVED, es decir, si se ha hecho click sobre él. Luego, la URL sobre la que se ha hecho click se obtiene fácilmente del evento.

Ya están las cuatro líneas mágicas que necesitamos para tener un mini-navegador en java.

2 comentarios:

Unknown dijo...

Chui sos un genio!! no sabes lo que me han ayudado tus posts, desde tu sitio anterior en yahoo he seguido tus mensajes y de verdad te agradezco de corazon que saques estos ratos para iluminarnos a los menos experimentados.

Saludos desde Costa Rica

Anónimo dijo...

gay