martes, 9 de diciembre de 2008

Dibujar una línea en un Canvas

Este es un ejemplo sencillo, la intención es sólo dibujar una línea en un programa Java. Usaremos dos clases, la primera clase "Lienzo" permitirá heredar un Canvas, indicado para realizar gráficos en Java. La clase Canvas tiene una función que sobreescribiremos, llamada paint(). Esta función es eficiente al graficar, ya que cada vez que movemos la ventana entera que contiene al canvas, se hace el repintado de inmediato y evitamos que se borren nuestros gráficos.

Redefiniremos la función paint(Graphics g), donde la variable 'g' es la que permite llamar métodos para la generación de primitivas geométricas como: líneas, círculos, elipses entre otras. Como se ve, no usaremos directamente la clase Canvas, sino que heredaremos todas sus propiedades hacia una clase de usuario "Lienzo".

La segunda clase es "App" que contendrá el main, y donde crearemos una ventana con JFrame, ahí 'empotraremos' nuestro Lienzo que contendrá la línea dibujada. Dibujaremos una línea en 2D: desde del punto (0,0) hasta el punto (400,200).

Hay que tomar en cuenta que las coordenadas del canvas empiezan de arriba abajo y de izquierda a derecha.
La jerarquía de las clases es más o menos como queda en la siguiente figura:

Las clases en naranja: "App" y "Lienzo" son las clases creadas por nosotros y la que usaremos, las clases en azul son clases llamadas de las librerías de Java, a través de la sentencia 'import'. Tanto la clase "App" como "Lienzo" están en el paquete "canvas" (véase la primera línea en el código: package canvas), por tanto tendremos que crear una carpeta con el nombre "canvas" en donde estarán los archivos compilados de las clases.

Lienzo.java

package canvas;

import java.awt.Canvas;
import java.awt.Graphics;

public class Lienzo extends Canvas
{

public void paint(Graphics g)
{
// Dibujando una linea desde el punto (0,0) hasta el punto (400,200)
g.drawLine(0,0,400,200);
}

}

App.java

package canvas;

import javax.swing.JFrame;

public class App
{
public static void main(String[] param)
{
Lienzo l = new Lienzo();

JFrame ventana = new JFrame("Ventana de dibujo");

ventana.getContentPane().add(l);
ventana.setSize(400,400);

ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ventana.setVisible(true);
ventana.pack();
}
}

Las sentencias usadas para la compilación fueron:

La ventana tiene dimensiones 400x400. La línea está dibujada desde la coordenada (0,0) del Canvas, hasta el punto final (400,200), como puede verse en la figura:

No hay comentarios: