Beruflich Dokumente
Kultur Dokumente
JAVAFX
¿Qué es JAVAFX?
• JavaFX proporciona a los desarrolladores de Java una nueva plataforma
gráfica.
• JavaFX 2.0 se publicó en octubre del 2011 con la intención de reemplazar
a Swing en la creación de nuevos interfaces gráficos de usuario (GUI).
• JavaFX es un conjunto de paquetes gráficos que permite a los
desarrolladores diseñar, crear y probar aplicaciones gráficas ricas y
potentes para dispositivos de escritorio, web y móviles.
• JavaFX es un sucesor de la popular biblioteca SWING, utilizada
anteriormente para manejar gráficos.
Tutorial de JAVAFX
• Español:
• http://code.makery.ch/library/javafx-8-tutorial/es/
• Inglés:
• http://cs.brown.edu/courses/cs015/docs/JavaFXGuide.pdf
Graphical User Interface(GUIs)
• Proporcionan una forma controlada por el usuario (es decir, gráfica)
para enviar mensajes a un sistema de objetos (normalmente su
aplicación).
Rich Internet Applications
• Son aquellas aplicaciones web que ofrecen características y
experiencia similares a las de las aplicaciones de escritorio.
• Ofrecen una mejor experiencia visual en comparación con las
aplicaciones web normales a los usuarios.
Elementos en
la escena
root
Escena (Scene)
Escenario
(Stage)
Agregando elementos al root
• Un solo elemento
• root.getChildren().add(objNodo)
}
Scene
• Tiene varios constructores, por el momento veremos 2:
3 ColorPicker 9 Scrollbar
Un ColorPicker proporciona un panel de controles diseñados para Un control de barra de desplazamiento representa un componente barra de desplazamiento con
permitir a un usuario manipular y seleccionar un color. el fin de permitir al usuario seleccionar de la gama de valores.
4 CheckBox
A CheckBox es un componente gráfico que puede ser ya sea en 10 FileChooser
un on(true) o apagado (false) estado. Un control FileChooser representa una ventana de diálogo desde el que el usuario puede
seleccionar un archivo.
5 RadioButton 11 ProgressBar
La clase RadioButton es un componente gráfico, que puede ser ya Como la tarea progresa hacia su conclusión, la barra de progreso muestra el porcentaje de la tarea
sea en un EN (true) o OFF (false) estado en un grupo. de finalización.
12 Slider
6 ListView Un control deslizante permite al usuario gráficamente seleccionar un valor deslizando un botón
Un componente ListView presenta al usuario una lista desplegable dentro de un intervalo acotado.
de elementos de texto.
Label Control
• Pertenece al paquete javafx.scene.control
• Contiene únicamente texto los constructores.
• No recibe ningún valor, por lo tanto el texto a
Label() mostrar estará en blanco. Para configúralo usar
setText(String str)
• Para los eventos del mouse, el objetivo del evento es el nodo en el cursor
del mouse. Múltiples nodos pueden estar disponibles en el cursor del
mouse. Si un círculo se coloca sobre un rectángulo. El nodo superior en el
cursor del mouse se selecciona como el destino del evento (Event Target)
• El objetivo del evento para eventos del teclado es el nodo que tiene el foco
Ruta del evento
Capture Phase
Ruta del evento
• Si hace clic en el rectángulo, se dará cuenta de que la salida muestra el mismo camino para el
evento a través de sus padres como lo hizo para el círculo. El evento aún pasa a través del
rectángulo, que es el destino del evento.
• Sin embargo, no ve ninguna salida, porque no ha registrado ningún filtro de eventos o
manejadores para que el rectángulo emita ningún mensaje. Puede hacer clic en cualquier punto
fuera del círculo y del rectángulo para ver el destino del evento y la ruta del evento.
Consumir Eventos
• Un evento se consume usando el método consume() en el método
handle() de filtros y controladores correspondientes.
• Si un evento se consume en un filtro de eventos de un nodo, el evento
no viaja a ningún nodo secundario.
• Si un evento se consume en un controlador de eventos de un nodo, el
evento no viaja a ningún nodo padre.
• Todos los filtros o manejadores de eventos para el nodo consumidor
se llaman, independientemente del filtro o controlador que consume
el evento.
Consumir Eventos
• Suponga que ha registrado tres controladores de eventos para un nodo
y el controlador de eventos, que se llama primero, consume el evento.
En este caso, los otros dos manejadores de eventos para el nodo siguen
siendo llamados.
• Se pueden usar los métodos setOnXXX() para registrar controladores de eventos para
un nodo (Event Handlers), no filtros de eventos (en este caso usar el método
tradicional addEventFilter()
• Soportar solo un Event Handler para UN NODO. Si desea registrar más de un Event
Handler para un nodo, usar addEventHandler()
Propiedades onXXX
Estos métodos no tienen una forma exclusive de remover un Event
Handler. Por lo cual lo recomendado es :
Para registrar:
Para eliminar:
Propiedades onXXX
• También existen métodos getOnXXX() que retornan una referencia al
controlador de evento previamente registrado para un nodo en
particular. Devuelve NULL si no se ha registrado un Event Handler para
el nodo.
• en el método handle:
¿En que consiste el manejo de
eventos?
• Por ejemplo para el evento de un botón: ActionEvent.
• Primero se debe registrar el handler (manejador) que hará de “escucha” (listener).
• Cuando el botón es pulsado, se le pasa como referencia this. Pasamos la referencia del botón al
listener.
• Cuando el listener detecta que ha ocurrido un evento en el botón, envía un objeto tipo
ActionEvent al método handle, el cual se encargará de realizar las acciones que le hayamos
especificado.
• En caso de tener varios botones, la clase EventObject, de la cual hereda ActionEvent, contiene el
método getSource(), el cual devuelve el origen del evento, es decir, quién ocasionó el evento.
Button Control : Events
• Permite implementar el comportamiento o las acciones que debe
realizar el botón.
• MouseEvent: Representa los eventos producidos por la interacción del ratón, por
ejemplo, hacer clic, mover el cursor, girar la rueda, etc.
• KeyEvent: Esta clase es para los eventos producidos por el teclado, puede ser, presionar o
liberar un tecla.
• WindowEvent: Aquí tenemos los eventos producidos por la ventana, por ejemplo, el
mostrar u ocultar la ventana.
• Los manejadores de eventos son implementados a través de clases
anónimas o lambda expressions.
finde una
inner class
Inicio de
una inner
class
finde una
inner class
Introducción
• Un lambda expression es un método Anónimo (sin nombre). Sin embargo este
método no se ejecuta por sí mismo.
• Un lambda expression se utiliza para implementar un método definido en una
interface functional (clase anónima).
• Una interface functional es aquella que define solamente un método
abstracto.(Indica el propósito de la interface) (SAM – Single Abstract Method)
• Por ejemplo:
• Interfaz Runnable define el método run()
• Una intefaz functional define el tipo del lambda expression.functional interface
defines the target type of a lambda.
Sintaxis de las Expresiones
Lambda
• permiten mejorar el uso de las clases anónimas internas convirtiendo
cinco líneas de código en una simple sentencia.
• Esta sentencia soluciona el problema de tener un método con varias
líneas al utilizar una clase interna.
• Una expresión Lambda está compuesta de tres partes:
Lambda Expression
Fundamentals
• Operador lambda es -> (becomes or goes to)
• Divide la expresión en 2:
• Lado Izquierdo: Parámetros requeridos por la expression. (Si no se
requieren parámetros, se utiliza una lista de parámetros vacía)
• Lado Derecho: Define las acciones de la expression Lambda
• Java define dos estructuras para el lambda.
• Una expresión simple.
• Bloque de código. () -> 123.45
Ejemplos
• Para responder a un evento requerimos un objeto que implemente la
interface EventHandler.
Utilizando lambda
expressions
Otra manera de registrar
eventos
• Para agregar estos manejadores de eventos usaremos los métodos
addEventHandler() o addEventFilter()
• removemos o quitamos un manejador usando las funciones,
removeEventFilter() o removeEventHandler().
Esta GUI corresponde a un Button que se
encuentra dentro de un StackPane, al
primero le agregamos un manejador de
eventos, y al segundo un filtro de
eventos, si ejecutamos y hacemos clic
sobre el botón veremos que primero se
llama al handler2 y luego al handler1,
podemos ver la consola de salida con los
correspondientes mensajes
ComboBox
• La clase ComboBox crea un control que permite al usuario seleccionar
una opción de una lista desplegable de opciones.
• La lista desplegable aparece cuando el usuario hace clic en el
ComboBoxcontrol.
• full press-drag-release gesture: Se utiliza cuando el gesto de arrastre va de un nodo origen a un nodo
destino.
• drag-and-drop gesture: es una acción del usuario que combina el movimiento del ratón con un botón
del ratón presionado. Se utiliza para transferir datos de la fuente del gesto a un objetivo del gesto.
• Un nodo a otro nodo
• Un nodo a una escena
• Una escena a otra escena
• Una escena a un nodo
Drag-and-Drop
• Un nodo puede arrastrarse para diferentes propósitos:
• Es posible que desee cambiar la forma de un nodo arrastrando sus límites o
moviéndolo arrastrándolo a una nueva ubicación. En este caso, el gesto implica
sólo un nodo: el nodo en el que se inició el gesto.
• Es posible que desee arrastrar un nodo y colocarlo en otro nodo para conectarlos
de alguna manera, por ejemplo, conectando dos nodos con un símbolo en un
diagrama de flujo. En este caso, el gesto de arrastre implica varios nodos. Cuando
se abandona el nodo de origen al nodo objetivo, se produce una acción.
• Puede arrastrar un nodo y colocarlo en otro nodo para transferir datos desde el
nodo origen al nodo objetivo. En este caso, el gesto de arrastre implica varios
nodos. Una transferencia de datos se produce cuando el nodo de origen se suelta.
Proceso drag-and-drop
• Varios pasos están implicados en realizar un gesto de arrastrar y soltar:
• Se presiona un botón del ratón en un nodo.
• El ratón se arrastra con el botón pulsado.
• El nodo recibe un evento detectado por arrastre.
• Se inicia un gesto de drag-and-drop en el nodo llamando al método startDragAndDrop(), convirtiendo al nodo en el
origen del gesto. Los datos del nodo fuente se colocan en una tabla de desplazamiento.
• Una vez que el sistema cambia a un gesto drag-and-drop, deja de entregar MousEvents y comienza a entregar
DragEvents.
• La fuente del gesto se arrastra hacia el objetivo de gesto potencial. El objetivo del gesto potencial comprueba si
acepta los datos colocados en el panel de desplazamiento. Si acepta, puede convertirse en el objetivo de gesto real.
• El usuario suelta el botón presionado en el objetivo de gesto, enviándolo a un evento de arrastrar y soltar.
• El objetivo gestual utiliza los datos.
• Se envía un evento de drag-done a la fuente de gestos indicando que el gesto de arrastrar y soltar se ha
completado.
VBox layout pane
• Crea una manera fácil de organizar una serie de nodos hijos en una sola columna
vertical.
• Podemos personalizar el espaciado vertical entre los nodos hijos utilizando el
método setSpacing (double) de Vbox.
• Cuanto mayor es el double pasado como argumento, más espacio se produce entre los
elementos secundarios de la GUI.
• El posicionamiento por defecto para la columna vertical está en TOP_LEFT de VBox
(Top Vertically, Left Horizontally)
• Se puede cambiar el posicionamiento vertical/horizontal de una columna usando
el método: setAlignment(Pos position) y enviando como argumento una
constante javafx.geometry.Pos
Ejemplo
wh
Scene scene = new Scene(root, 200, 200);
stage.setTitle("Sample VBox");
stage.setScene(scene);
stage.show();
Ejemplo
• Agregando espacios entre los nodos:
root.setSpacing(8);
root.setSpacing(8);
root.setAlignment(Pos.TOP_CENTER);
• Una elipse es similar a un círculo, pero tiene dos radios: uno en el eje
xy el otro en el eje y.
Dialog Boxes
• Ventanas emergentes.
00:07
0
1
2
3
4
5
6
Introducción de cronogramas
Por ejemplo:
El vehículo en el
0 segundo o el
asociado con el
keyframe
key value representa el
un vehículo que tx=0 representa cambio de Los cuadros
En el segundo 5 intermedios entre
se mueve de el primer posición o valor
el key value tx = dos fotogramas clave
izquierda a keyframe. de traducción a consecutivos son
200 representa
derecha lo largo del eje x generados por el
el segundo
horizontalmente interpolador para
keyframe, y así producir un
a lo largo de su
sucesivamente movimiento más fino
eje x durante 20
segundos
Duration Class
• Pertenece al paquete javafx.útil.
• Representa una duración de tiempo en milisegundos, segundos,
minutos y horas.
• Es una clase inmutable.
• Representa la cantidad de tiempo para cada ciclo de una animación.
• Puede representar una duración positiva o negativa.
Duration Class
• Puede crear un objeto Duration .
• Uso del constructor
• El constructor toma la cantidad de tiempo en milisegundos.
• Constructores:
Nodo • KeyValue(WritableValue target, T endValue) Valor
Text • KeyValue(WritableValue target, T endValue, Interpolator interpolator) final
Interpolador
default
KeyFrame Class
• Define el estado final de un nodo en instante de tiempo específico. El
estado final es determinado por los Key values asociados.
• Encapsula:
• Un instante en la línea de tiempo(timeline)
• Un conjunto de KeyValues
• Un nombre
• Un controlador ActionEvent
KeyFrame Class
• El instante de Timeline con el cual es asociado un keyframe se define por
un objeto Duration
• El conjunto de KeyValues define el valor final del Target para el keyframe.
• Un objeto KeyFrame puede tener un nombre, para usarlo como punto de
referencia para saltar al instante definido en este keyframe durante una
animación.
• Con el método getCuePoints() se obtiene el mapa de puntos de
referencias.
• Opcionalmente se puede adjuntar un controlador ActionEvent
KeyFrame Class
• Constructores:
Timeline
• Constructores
Pasos para construir
Animaciones de Timeline
• Crear los KeyValues
• Construir keyframes asociando los keyValues
• Crear un objeto Timeline con keyframes
• Setear las propiedades de animación
• Usar el método play() para corer la animación.
Controlando una animación
• La clase Animation contiene métodos para controlar el Timeline:
• play() reproduce una animación desde su posición actual.
• jumpTo(Duration time) y jumpTo(String cuePoint) para establecer la posición actual de la
animación a una duración específica o un punto de referencia antes de llamar al método play().
• Es asíncrono. Es posible que la animación no comience inmediatamente.
• Llamar al método mientras se ejecuta la animación no tiene ningún efecto.
• playFrom() reproduce una animación a partir de la duración especificada o del punto de
referencia especificado.
• playFromStart() reproduce la animación desde el principio (duración = 0)
• stop() detiene una animación en ejecución.
• pause() método para pausar una animación.
Puntos de referencia
• Puede configurar puntos de referencia en un archivo Timeline. Los puntos de referencia
se denominan instantes en el Timeline. Una animación puede saltar a un punto de
referencia utilizando el jumpTo(String cuePoint)método. Una animación mantiene un
ObservableMap de puntos de referencia. La clave del mapa es el nombre de los puntos
de referencia y los valores son la duración correspondiente en la línea de tiempo. Utilice
el getCuePoints()método para obtener la referencia del mapa de puntos de referencia.
• Hay dos formas de agregar puntos de referencia a Timeline.
• Dar un nombre al KeyFrame que agregue a una línea de tiempo que añade un punto de
cue en el mapa de puntos de cue
• Adición de parejas nombre-duración al mapa devuelto por el método getCuePoints () de
la clase Animation
Timeline Animation
• Una animación es conducida por sus propiedades asociadas, tales como tamaño,
ubicación y color, etc.
• Timeline proporciona la capacidad de actualizar los valores de la propiedad a lo largo
de la progresión del tiempo.
• JavaFX admite la animación de keyframes.
• En la animación de keyframes, las transiciones de estado animado de la escena gráfica
son declaradas por instantáneas de inicio y de fin (keyframes) del estado de la escena
en determinados momentos.
• El sistema puede realizar automáticamente la animación.
• Puede detener, pausar, reanudar, invertir o repetir el movimiento cuando se solicite.
Transiciones
• Se pueden aplicar animaciones (transitions) como
• Fade Transition ,
• Fill Transition ,
• Rotate Transition ,
• Scale Transition ,
• Stroke Transition ,
• Translate Transition ,
• Path Transition ,
• Sequential Transition ,
• Pause Transition ,
• Parallel Transition .
• Fade Transition
• Cambia la opacidad de un nodo en un tiempo dado.
• Fill Transition
• Representa una transición de relleno para una Forma mediante la transición gradual del relleno de la
forma entre el rango especificado y la duración.
• Path Transition
• Una transición de trayectoria mueve un nodo a lo largo de una trayectoria de un extremo a otro
durante un tiempo dado.
• Parallel Transition
• Una transición paralela ejecuta varias transiciones simultáneamente.
• Sequential Transition
• Una transición secuencial ejecuta varias transiciones una tras otra.