// // BotonImg.java // Copyright (c) 1996, Agustin Froufe // Todos los derechos reservados. // // No se asume ninguna responsabilidad por el uso o alteracion de este // software. Este software se proporciona COMO ES, sin garantia de ningun // tipo de su funcionamiento y en ningun caso sera el autor responsable de // daños o perjuicios que se deriven del mal uso del software, aun cuando // este haya sido notificado de la posibilidad de dicho daño. // // Compilador: javac 1.0 // Autor: Agustin Froufe // Creacion: 11-Sep-1996 11:35:43 // //-------------------------------------------------------------------------- // Esta informacion no es necesariamente definitiva y est  sujeta a cambios // que pueden ser incorporados en cualquier momento, sin avisar. //-------------------------------------------------------------------------- import java.awt.*; import java.awt.image.*; import java.applet.*; import java.net.*; public class BotonImg { private Applet appSuperior; public Image imagen; public Image imagenUp; public Image imagenDown; public Image imagenMove; public ImageFilter filtro; public String mensaje; public int estado; public int offX; public int offY; public int tamX; public int tamY; public URL url; public String href; // En este método vamos fijando las imágenes que se presentarán en función // del estado en que se encuentre el ratón // Utilizamos un método que Java proporciona en la clase java.awt.imagen // que nos permite extraer una zona de una imagen y guardarla como imagen // completa. De este modo extraemos del dibujo que contiene las tres imágenes // posibles, cada imagen correspondiente a los eventos que le llegan al // objeto enviados por el ratón public void init() { filtro = new CropImageFilter( 0,0,tamX,tamY ); imagenUp = appSuperior.createImage( new FilteredImageSource( imagen.getSource(),filtro ) ); filtro = new CropImageFilter( 0, tamY,tamX,tamY ); imagenMove = appSuperior.createImage( new FilteredImageSource( imagen.getSource(),filtro ) ); filtro = new CropImageFilter( 0,tamY*2,tamX,tamY ); imagenDown = appSuperior.createImage( new FilteredImageSource( imagen.getSource(),filtro ) ); // Aquí componemos la dirección a la que saltar cuando se pique con el // ratón la zona que corresponda al botón try { url = new URL( appSuperior.getDocumentBase(),href ); } catch( MalformedURLException e ) { url = null; } return; } // Constructor, al que le pasamos el applet que correponde al dibujo completo public BotonImg( Applet applet ) { appSuperior = applet; } // Sobrecargamos el método showDocument, para que no se abra con las // características del applet del botón, sino con las del padre, que sí // tendrá las características de la página public void showDocument( URL uRL ) { appSuperior.getAppletContext().showDocument( uRL ); } // En este método, pintamos un dibujo u otro sobre el botón, en función del // estado que nos devuelva el sistema para el cursor y los botones del // ratón public void paint( Graphics g ) { if( estado == 0 ) g.drawImage( imagenUp,offX,offY,appSuperior ); else if(estado == 1) g.drawImage( imagenDown,offX,offY,appSuperior ); else if( estado == 2 ) g.drawImage( imagenMove,offX,offY,appSuperior ); } // En los tres métodos que siguen, controlamos los eventos que nos llegan del // ratón. La técnica a seguir es la misma en cada uno de ellos, mirar si // el cursor se encuentra dentro del campo de acción del botón que estamos // trantando, si no está dentro del campo del botón, pero sí dentro del // dibujo general del applet, devolvemos el control al applet general para // que siga comprobando si está el cursor sobre otro botón. Si el cursor se // encuentra en nuestro campo de acción, actuamos en consecuencia public boolean mouseDown( Event evt,int i,int j ) { if( i >= offX && i < offX + tamX && j >= offY && j < offY + tamY ) { // Fijamos el estado a 1, para que cuando se suelte el botón // podamos saltar a la dirección que se haya especificado en la // lista de parámetros del applet estado = 1; appSuperior.repaint(); } else if( estado != 0 ) { appSuperior.showStatus( "" ); estado = 0; appSuperior.repaint(); } return( false ); } public boolean mouseUp( Event evt,int i,int j ) { if( i >= offX && i < offX + tamX && j >= offY && j < offY + tamY ) { // Si previamente habíamos pulsado el ratón sobre este botón, hacemos // que se muestre la página correcpondiente a la dirección URL que se // había cargado if( estado == 1 ) showDocument( url ); estado = 2; appSuperior.repaint(); } else if( estado != 0 ) { appSuperior.showStatus( "" ); estado = 0; appSuperior.repaint(); } return( false ); } public boolean mouseMove( Event evt,int i,int j ) { if( i >= offX && i < offX + tamX && j >= offY && j < offY + tamY ) { // Si sólo movemos el cursor sobre el botón, nos limitamos a presentar // el mensaje que se ha definido en los parámetros de llamada al // applet estado = 2; appSuperior.showStatus( mensaje ); appSuperior.repaint(); } else if( estado != 0 ) { appSuperior.showStatus( "" ); estado = 0; appSuperior.repaint(); } return( false ); } } //------------------------------------------ Final del fichero BotonImg.java