Programando en Java: Panel y Graphics (III)

Una vez terminado el parser para mi XML del que hablé en el anterior post de esta serie de artículos sobre Java, me he puesto ya con la parte interesante, los resultados, los gráficos.
A simple vista, puede parecer fácil dibujar unos ejes, y unas líneas de colores diferentes. Y lo es, pero para alguien que nunca había usado Java para esos menesteres, se hace algo complicado.

Además, a todo ello se une el hecho que la interfaz principal del programa no la he programado yo, sino que he usado Thinlet para hacerla, lo que simplifica mucho y ahorra conocer cómo funciona AWT, SWING, etc.

A continuación os explicaré cómo crear un Frame, y cómo pintar cosas en él.

Partía de la situación de una interfaz gráfica, con tabs (pestañas) creada con Thinlet, y quería crear un Panel (o una serie de Panels) para dibujar en cada uno un gráfico.

Buscando ejemplos por la red, lo que encontré fue que había que sobrecargar la función paint de la clase, pero de qué clase? Imagino que la cosa es fácil con un ejemplo de 3 líneas y una sola clase principal, pero cuando el proyecto es grande no sabes ni en que clase estás.

No sé habrá algún método mejor, pero lo que yo he hecho es lo siguiente:

Desde el constructor de mi clase principal (la que extiende de Thinlet), creo un objeto, declarado en la clase, que deriva de Frame:
visu = new Visualizar(this);

Y lo añado a mi Frame principal con add.
add(visu);

Aquí se pueden establecer parámetros como el tamaño, si es visible, etc.
visu.setBounds(50,100,500,350);

Lo interesante viene en la definición de la clase Visualizar, la declaro de la siguiente forma:
public class Visualizar extends Panel {

Al hacer que la clase Visualizar extiende de Panel, podremos sobrecargar el método paint y pintar automágicamente cosas en él.
Simplemente, definimos el método en la clase:

public void paint(Graphics gra) {
//Podemos recuperar la dimensión del panel con getBounds()
Rectangle r = this.getBounds();
//Y dibujar un par de líneas en él.
gra.drawLine(1,r.height-1,r.width, r.height-1);
gra.drawLine(1,1,1,r.height);

}

El resto es vuestro. Podéis usar todas las funciones que contiene Graphics para pintar cosas en el Panel. Cada vez que tenga que mostrarse el panel, se llama automáticamente la función paint().

Por cierto, en el caso que interese hacer desaparecer el panel en según que casos (por ejemplo, cuando cambio de tab me interesa que desaparezca el panel), simplemente hay que usar setVisible(), como en el ejemplo:

if(tab==2) {
visu.setVisible(false);
}

Referencias:
Programando en Java (II) - XML: http://www.gra2.com/article.php/20050228222237484
Programando en Java (I) - Thinlet: http://www.gra2.com/article.php/20050214225825123

Saludos,
Dani.

P.S: Gracias Valerie, por tu comentario en el anterior artículo. Gracias a gente como tú veo que a alguien le sirven los artículos y me dan ganas de seguir escribiéndolos.



 


Trackback

Trackback URL for this entry:
http://www.gra2.com/trackback.php/20050320211027456

No trackback comments for this entry.

Comments

Post a comment

Ya entiendo, Pero yo hace Poco comencé a utilizar java y nos pusieron a hacer un ejercicio que es sencillo trata de hacer una secuencia en 5 paneles con figuras donde cada panel tiene un botón el cual visualiza la imagen o figura del mismo , ocultando Los demás. Pero Lo que no eh Logrado hacer es como colocar la imagen dentro de un panel desde otra Clase utilizando el método Paint(Graphics g)?¿

Anonymous on Saturday, June 18 2011 @ 01:04 AM CEST Reply | #

Search



About

newton.gra2.com is a blog about technology, opinion and random thoughts written by Daniel Alvarez, a computer engineer currently living in Zurich, Switzerland.

Topics

News (20/0)
Manuals (24/0)
Security (7/0)
Music (3/0)
Weeklog (1/0)
Personal (34/0)
Photos (3/0)
Opinion (14/0)
Windows (5/0)

Blogroll

Pros i contres (Jordi)
Entrepa de fusta (Oriol)
Spaghetti Code (Isaac)
Made in net (Eric)
Nogare (Juan)
Blog de Isaac Jimenez
Web d'en Jaume Benet
Montcada Wireless (Fran)
Blog d'en Ricard Forniol
Angela Fabregues
in.solit.us

Libertad Digital
FOX News
The Wall Street Journal
The Washington Times
The Jerusalem Post

Michelle Malkin
Eurabian News
Nihil Obstat
Barcepundit
Expose the left
Davids Medienkritik
Johan Norberg
Ayaan Hirsi Ali

User Functions

:

:


Lost your password?

Latest posts

Stories

No new stories

Comments last 2 days


Trackbacks last 2 days

No new trackback comments

Links last 2 weeks

No recent new links