informática gráfica introducción a java 2d y lg3d carlos de tapia miguel del corral aníbal...

32
Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

Upload: neva-sarmiento

Post on 22-Jan-2016

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

Informática Gráfica

Introducción a Java 2D y LG3D

Carlos de Tapia Miguel del CorralAníbal Chehayeb Morán

Page 2: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aní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

Page 3: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morá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().

Page 4: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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);

// ...}

}

Page 5: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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);}

Page 6: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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()

Page 7: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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)

Page 8: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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.

Page 9: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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.

Page 10: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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

Page 11: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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();// ...

}}

Page 12: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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() );

}}

Page 13: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

Java 2D

Ejemplo2.java

Page 14: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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)

Page 15: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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.

Page 16: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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

Page 17: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

Project Looking Glass

Plataforma abierta de Sun Microsystems para explorar interfaces de usuario 3D

Page 18: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

Project Looking Glass

Major Scene Manager Components

Page 19: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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

Page 20: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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

Page 21: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morá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();

Page 22: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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);

Page 23: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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);

Page 24: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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);

Page 25: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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);}

Page 26: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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.).

Page 27: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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>

Page 28: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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

Page 29: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

Ejemplo 1 Paso 7: ejecución de LG3D

Project Looking Glass

Page 30: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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/

Page 31: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

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

Page 32: Informática Gráfica Introducción a Java 2D y LG3D Carlos de Tapia Miguel del Corral Aníbal Chehayeb Morán

Introducción a Java 2D y LG3D

¿preguntas?