Swing es una tecnología fácil y rápida para crear una interfaz grafica de una aplicación. En mi modesta opinión, JavaFX 2.0 ofrece la posibilidad de dar mas potencia a las interfaces graficas que puede ofrecer la tecnología Java. A JavaFX 2.0 lo único que le falta es tiempo de “incrustarse” en el uso cotidiano de los programadores.
Voy a explicar un framework muy sencillo para crear una historia con muñecos. Todo con JavaFX2.0. La idea es que busques una cara que quieres animar, como por ejemplo la de nuestro amigo George:

Recartar la cara con cualquier programa de edicion de imagenes, cortarla en dos partes (superior e inferior) y animarla poniendole voz:

En esta primera parte voy a centrarme en las interfaces; las implementaciones en el siguiente post.
El proyecto lo he creado con Netbeans 7.1. Se debe crear la siguiente estructura de clases:

La idea es que en una clase donde se quiere crear una "historia" se debe crear actores que se componen de cuerpo y de cabeza.
- Main.java: Punto de entrada de la aplicación.
package es;
import es.historia.HistoriaExcepcion;
import es.historia.IActor;
import es.historia.ICabeza;
import es.historia.mueve.impl.ActorImpl;
import es.historia.parte.impl.CabezaImpl;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
/**
*
* @author Propietario
*/
public class Main extends Application {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws HistoriaExcepcion {
primaryStage.setTitle("Dibujo!");
// Se crea el actor
final IActor juguete = new ActorImpl();
// Se crea la cabeza
final ICabeza cabeza= new CabezaImpl();
// imagen que es la parte superior e inferior de la cabeza
cabeza.establecerCara("c:/caraInferior.JPG", "c:/caraSuperior.JPG");
// donde ponerlo dentro de la pantalla
cabeza.establecerPosicion(50,50);
// se define la cabeza del actor. El cuerpo para otro post.
juguete.definir(cabeza, null);
// Un boton para que hable
Button btn = new Button("Hablar");
btn.setOnAction(new EventHandler(){
public void handle(ActionEvent event) {
juguete.hablar("file:/uno_comoestas.wav", cabeza);
}
});
// un actor dibujado no es mas que un grupo de componentes JavaFx 2.0
Group group = juguete.dibujar();
group.getChildren().add(btn);
// apartir de aqui ya es como cualquier otra aplicacion JavaFx 2.0
Scene scene = new Scene(group, 500, 500);
primaryStage.setScene(scene);
primaryStage.show();
}
}
- HistoriaExcepcion: Excepcion para el uso dentro del framework
package es.historia;
/**
*
* @author Propietario
*/
public class HistoriaExcepcion extends Exception{
public HistoriaExcepcion(String string) {
super(string);
}
}
package es.historia;
- IActor: Requerimientos de una clase que sea una implementacion de un actor.
/**
*
* @author Propietario
*/
public interface IActor extends IMovimiento{
// Un actor es siempre una cabeza y un cuerpo
public void definir(ICabeza cabeza, ICuerpo cuerpo);
// accion de hablar
public void hablar(String frase,final ICabeza cabeza);
}
- ICabeza: Requerimientos de una clase que sea una implementacion de una cabeza.
package es.historia;
/**
*
* @author Propietario
*/
public interface ICabeza extends IMovimiento{
//una cara es una imagen superio y una cara inferior
public void establecerCara (String caraInferior, String caraSuperior) throws HistoriaExcepcion;
// definir posicion
public void establecerPosicion(int i, int i0);
// movimiento que se sucede siempre
public void empezarMovimientoFijo();
//movimiento cuando se habla
public void empiezaHablar();
// movimiento cuando se termina de hablar
public void terminaHablar();
}
- ICuerpo: Requerimientos de una clase que sea una implementacion de un cuerpo.
package es.historia;
/**
*
* @author Propietario
*/
public interface ICuerpo extends IMovimiento{
}
- IMarco: Requerimientos de una clase que sea una implementacion de un cuerpo.
package es.historia;
/**
*
* @author Propietario
*/
public interface IMarco {
}
- IMovimiento: Que funcionalidad debe de tener implementaciones que se puedan mover (cabeza, cuerpo, actor, etc..)
package es.historia;
import javafx.scene.Group;
/**
*
* @author Propietario
*/
public interface IMovimiento {
// dibujar la unidad (cuerpo, cabeza, etc..)
public Group dibujar ();
// mover la unidad
public void mover();
}
No hay comentarios:
Publicar un comentario