Informática Gráfica
Introducción a Java 2D y LG3D
Carlos de Tapia Miguel del CorralAníbal Chehayeb Morán
Índice de Contenidos
Java 2D La clase JPanel Contexto gráfico Eventos de ratón Eventos de teclado Referencias
Project Looking Glass (LG3D) Características API del lado del Cliente Ejemplo Referencias Demostración
Java 2D
La clase JComponent posee un método denominado paintComponent(), responsable de pintar en pantalla el componente en cuestión.
protected void paintComponent(Graphics g)
Para crear gráficos 2D se emplea la clase JPanel, subclase de JComponent, redefiniendo de manera adecuada el método paintComponent().
Java 2D
Esquema: Primero se debe invocar el método paintComponent() de la
superclase.
public class Lienzo extends JPanel {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// ...}
}
Java 2D
Ejemplo1.java:
protected void paintComponent(Graphics g) {super.paintComponent(g);
int width = (int) getSize().getWidth();int height = (int) getSize().getHeight();
g.setColor(Color.ORANGE);g.fillRect(0,0,width,height);}
Java 2D
El contexto gráfico
La clase Graphics de java.awt proporciona las primitivas necesarias para pintar diferentes tipos de elementos (rectángulos, óvalos, cadenas, etc.) sobre el lienzo. drawLine(), drawRect(), fillRect(), drawOval(),
fillOval(), drawString() …
Además, mantiene información como el color y la fuente empleados get/setColor(), get/setFont()
Java 2D
Eventos de ratón
La clase Component (del paquete java.awt) proporciona dos métodos que permiten añadir un oyente para capturar los eventos generados por el ratón, incluyendo los eventos de movimiento.
void addMouseListener(MouseListener l)
void addMouseMotionListener(MouseMotionListener l)
Java 2D
La interfaz MouseListener
void mouseClicked(MouseEvent e) void mouseEntered(MouseEvent e) void mouseExited(MouseEvent e) void mousePressed(MouseEvent e) void mouseReleased(MouseEvent e)
La clase MouseAdapter proporciona una implementación por defecto (esto es, que no hace nada) de todas las operaciones de la interfaz MouseListener.
Java 2D
La interfaz MouseMotionListener Como su nombre indica, nos permite capturar aquellos eventos del ratón
relacionados con el movimiento del mismo.
void mouseDragged(MouseEvent e) void mouseMoved(MouseEvent e)
De la misma forma, la clase MouseMotionAdapter proporciona una implementación por defecto de todas las operaciones de la interfaz MouseMotionListener.
Java 2D
La clase MouseEvent Proporciona información acerca del evento de ratón que se ha
producido. Algunos de sus métodos más usados son:
int getX() int getY() Point getPoint() Object getSource(): método heredado de EventObject int getButton(): devuelve alguna se las siguientes constantes:
NOBUTTON, BUTTON1, BUTTON2 ó BUTTON3
Java 2D
Ejemplo
public Lienzo() {
super();addMouseListener( new MyMouseListener() );
}
class MyMouseListener extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
int x = e.getX();int y = e.getY();// ...
}}
Java 2D
Ejemplo2.java
protected void paintComponent(Graphics g) {
…
g.setColor( new Color(0x00,0x00,0x00) );g.setFont( new Font("Arial",Font.ITALIC,18) );g.drawString("Haz clic aquí",50,50);}
class MyMouseListener extends MouseAdapter {
public void mouseClicked(MouseEvent event) {
System.out.println("coordenada x: " + event.getX() + ", " + "coordenada y: " + event.getY() );
}}
Java 2D
Ejemplo2.java
Java 2D
Eventos de teclado
Al igual que con los eventos de ratón, la clase Component proporciona el método addKeyListener() para añadir un oyente que nos permita capturar los eventos de teclado.
void addKeyListener(KeyListener l)
Java 2D
La interfaz KeyListener
void keyPressed(KeyEvent e) void keyReleased(KeyEvent e) void keyTyped(KeyEvent e)
KeyAdapter proporciona una implementación por defecto de todas las operaciones de la interfaz KeyListener.
Java 2D
Referencias
Java 2D API Documentation http://java.sun.com/j2se/1.4/docs/guide/2d/index.html
J2 SE 1.5 API Specification http://java.sun.com/j2se/1.5.0/docs/api/
2D Graphics Tutorial http://java.sun.com/docs/books/tutorial/2d/index.html
Java 2D API FAQ http://java.sun.com/products/java-media/2D/forDevelopers/java2dfaq.html
Java 2D API Sample Programs http://java.sun.com/products/java-media/2D/samples/suite/index.html
Project Looking Glass
Plataforma abierta de Sun Microsystems para explorar interfaces de usuario 3D
Project Looking Glass
Major Scene Manager Components
Project Looking Glass
Características Arquitectura Cliente/Servidor
Grafo de escena C/S permite a varios procesos compartir el mismo universo 3D.
Capa de Abstracción de Integración de Aplicaciones Foundation Window System
module (FWS): integración con el sistema de ventanas subyacente (AWT, X11).
Native Window representation module: capa de abstracción para las aplicaciones.
Soporte de aplicaciones 2D
Project Looking Glass
API del lado del cliente Java2 SE + Java 3D LG3D API: distinguimos dos
niveles: Clases basadas en el Grado
de Escena de Java 3D. Clases especializadas de
LG3D. Aplicación
Ejemplo 1 Sencilla aplicación consistente en representar
una caja (box) en pantalla. Paso 1:
Creación del contenedor principal de la aplicación (instancia de la clase Frame3D perteneciente al paquete org.jdesktop.lg3d.wg)
Project Looking Glass
Frame3D frame3d = new Frame3D();
Ejemplo 1 Paso 2:
Creación de una caja (instancia de la clase Box del paquete org.jdesktop.lg3d.utils.shape) de 8cm x 6cm x 4cm.
Project Looking Glass
SimpleAppearance app = new SimpleAppearance(0.6f, 0.8f, 0.6f
);
Box box = new Box(0.04f, 0.03f, 0.02f, app);
Project Looking Glass
Ejemplo 1 Paso 3:
Se añade la caja a un contenedor (instancia de la clase Component3D) y éste se añade, a su vez, al frame de la aplicación.
Component3D comp = new Component3D();
comp.addChild(box);
frame3d.addChild(comp);
Ejemplo 1 Paso 4:
Inicialización del frame
Project Looking Glass
frame3d.setPreferredSize(new Vector3f(0.08f, 0.06f, 0.04f)
);
frame3d.changeEnabled(true);
frame3d.changeVisible(true);
Project Looking Glass
Ejemplo 1: Fichero Tutorial1.java (constructor de la clase)
public Tutorial1() {
Frame3D frame3d = new Frame3D(); SimpleAppearance app = new SimpleAppearance(0.6f, 0.8f, 0.6f); Box box = new Box(0.04f, 0.03f, 0.02f, app); Component3D comp = new Component3D(); comp.addChild(box); frame3d.addChild(comp); frame3d.setPreferredSize( new Vector3f(0.08f, 0.06f, 0.04f) ); frame3d.changeEnabled(true); frame3d.changeVisible(true);}
Project Looking Glass
Ejemplo 1 Paso 5:
Para la compilación de las fuentes es necesario incluir en el CLASSPATH el fichero lg3d-core.jar.
javac -cp "$LG3DHOME/lib/lg3d-core.jar" Tutorial1.java
Paso 6: Crear el .jar con nuestra aplicación. Para ello, se debe
incluir: las fuentes, el fichero manifest, el fichero de configuración y los recursos (imágenes, etc.).
Project Looking Glass
Ejemplo 1: Fichero de configuración (Tutorial1.lgcfg)
<?xml version="1.0" encoding="UTF-8"?><java version="1.5.0" class="java.beans.XMLDecoder"> <object class="org.jdesktop.lg3d.scenemanager.config.ApplicationDescription"> <void property="exec"> <string>java Tutorial1</string> </void> <void property="iconFilename"> <string>tutorial1.png</string> </void> <void property="name"> <string>Tutorial 1</string> </void> <void property="classpathJars"> <string>Tutorial1.jar</string> </void> </object></java>
Project Looking Glass
Ejemplo 1 Fichero manifest (Tutorial1.MF) Main-Class: Tutorial1
Config-File: Tutorial1.lgcfg
(línea en blanco)
Creación del .jar jar cmvf Tutorial1.MF Tutorial1.jar Tutorial1.class
Tutorial1.lgcfg tutorial1.png
Copiar el fichero Tutorial1.jar en el subdirectorio $LG3DHOME/ext/app
Ejemplo 1 Paso 7: ejecución de LG3D
Project Looking Glass
Project Looking Glass
Referencias (I)
Project Looking Glass - A Comprehensive Overview of the Technology https://lg3d-core.dev.java.net/files/documents/1834/30923/LG3D-
Overview.pdf Getting Started with the Project Looking Glass Developer’s Release
https://lg3d.dev.java.net/lg3d-getting-started.html Project Looking Glass Developer’s Guide
https://lg3d.dev.java.net/lg3d-developers-guide.html Project Looking Glass API (pre-Alpha)
http://javadesktop.org/lg3d/javadoc/0-7-1-latest/api/ Project Looking Glass Demo Applications
https://lg3d-demo-apps.dev.java.net/
Project Looking Glass
Referencias (y II)
Project Looking Glass Application Tutorial 1 - An introduction to the lg3d framework https://lg3d.dev.java.net/tutorial/tutorial1.html
Project Looking Glass Application Tutorial 2 – Simple manipulations and user interactions https://lg3d.dev.java.net/tutorial/tutorial2.html
Project Looking Glass Application Tutorial 3 – Complex manipulations and user interaction https://lg3d.dev.java.net/tutorial/tutorial3.html
java.net Forums – Project Looking Glass 3D http://forums.java.net/jive/forum.jspa?forumID=80
Introducción a Java 2D y LG3D
¿preguntas?