http://www.librosgratis.org
DibuJava Además de los componentes estándar (botones, listas, etc.), hay un componente para dibujo "libre" que nos permite implementar cualquier otro tipo de control: la clase Canvas. Típicamente se usa para dibujar, y corresponde a una zona rectangular dentro de una ventana. La clase en sí no hace prácticamente nada; el programador debe definir una subclase de Canvas a la que el AWT le envía todos los eventos de mouse y teclado. Redefiniendo los métodos gotFocus, lostFocus, keyDown, keyUp, mouseEnter, mouseExit, mouseMove, mouseDrag, mouseDown y mouseUp, el programador puede hacer lo que se le ocurra dentro de ese rectángulo. Vamos a hacer uso de un Canvas para generar un applet donde habrá una zona rectangular dentro de la que, haciendo click con el mouse y moviéndolo sin soltar el botón, dibujaremos un rectángulo dinámicamente. Esto nos permitirá ver cómo usar un Canvas para dibujar, capturar eventos, etc. El borde tiembla un poco al redibujar, pero ya veremos cómo evitar eso.
Canvas en acción Primero vamos a poner, como ya se está haciendo costumbre, el código del applet (Recordar que debe cargarse desde una página html para verlo! Aquí no creamos ninguna ventana y no podremos verlo como aplicación standalone) y luego intentaremos explicar cómo funciona. import java.awt.*; import java.applet.Applet; public class Ejemplo15 extends Applet { public void init() { Label label = new Label("Pique y arrastre con el mouse!"); miCanvas zonaDib = new miCanvas(); zonaDib.resize(new Dimension (200,200)); add("North", label); add("Center", zonaDib); resize(300,250); } } class miCanvas extends Canvas { Rectangle rectActual; public boolean mouseDown(Event e, int x, int y) { rectActual = new Rectangle(x, y, 0, 0); repaint(); return false; } public boolean mouseDrag(Event e, int x, int y) { rectActual.resize(x-rectActual.x, y-rectActual.y); repaint(); return false; } public boolean mouseUp(Event e, int x, int y) { rectActual.resize(x-rectActual.x, y-rectActual.y); repaint(); return false;
Página 60