Académique Documents
Professionnel Documents
Culture Documents
A traves de Interfaces
JavaFX, Graficas de
MVC y Usuario
FXML GUI
• Como? • Que
Syllabus
El syllabus aun esta en elaboración, puesto que esta
materia recién se me asigno ya que el profesor anterior
resigno.
A breves rasgos veremos lo detallado en la diapositiva
anterior con un fuerte enfoque en Event-Driven
Programming.
Que esperar?
Mucha programación, mucho código
Hacer interfaz graficas que corran en el escritorio (veremos acerca de otras plataformas si se
portan bien).
Trabajar en Parejas.
Proyectos: Valen el 30% de la nota. (Si no hacen los proyectos, ya valieron).
Examen: Practico y Teórico.
Bonus Points: Por hacer tareas extra (Autoaprendizaje, Tareas opcionales, Videos, asistir a
eventos relacionados con la materia, por mostrar amor a la programación sobre todas las cosas).
Introducción a la
Programación Visual
OBJETIVO: DAR A CONOCER LOS PRINCIPIOS BÁSICOS DE LA
PROGRAMACIÓN VISUAL.
Programación Visual
Esta materia se deberia llamar Diseno de GUI.
Programacion Visual se refiere mas a los
lenguajes de programacion Visual (VPLs).
Los VPLs permiten a los usuarios crear
programas mediante manipulación grafica de
elementos en pantalla.
Nosotros haremos eso???
◦ Parcialmente!
Interfaces de Usuario (UI)
Permiten al usuario interactuar con dispositivos electrónicos.
◦ Interacción Humano Machina (Human-Machine Interaction).
Software
GUI
CLI
VR
Reflexión
Conversemos con nuestro compañero y en un papel anotemos las ventajas y desventajas que
observamos de las siguientes interfaces de interacción de Usuario:
CLI
Interfaces de Comando por Voz
GUIs
VR
Necesidad de las GUI
GUI: Graphic User Interface
Hacen mas fácil y accesible el Software.
Una interfaz intuitiva disminuye la curva de
aprendizaje de uso del software.
Es mas fácil recordar botones y menus que
comandos CLI.
WYSIWYG
Aspectos de una Buena Interfaz
8 Aspectos se consideran al momento de diseñar una buena interfaz.
Claridad: Evitar ambigüedad.
Concisa: no sobrecargar la Interfaz
Familiar: Mantener un uso consistente de los elementos que el usuario ya conoce.
Responsiva: Debe Proveer Feedback.
Consistente: Permite a los usuarios reconocer patrones de uso.
Estética: Experiencia placentera. Usuarios felices son buenas noticias.
Eficiencia: la Interfaz debe ayudarnos a ser mas productivos.
Clemente: Una buena interfaz no debe castigar a sus usuarios por sus errores, debe proveer medios
para reparar los posibles danos.
Buena Interfaz de Usuario?
Otras Interfaces de Usuario
Social Natural User Interface
Se enfocan en el interacciones
Sociales.
Explorar la capacidad de los
humanos de interactuar con
maquinas a través del
movimiento, habla, mirada y
otras tecnologías que van mas
alla del mouse y teclado
Mas Social NUI
Y que hay de VR?
Vamos a Aprender a hacer cosas
Bacanes?
Pues NOOOOOOO!
Cosas bacanes como estas requieren que sepamos primero acerca de interfaces de usuario en
Pantallas.
Tambien requieren que sepamos programacion orientada a Eventos.
Pero de esta clase pueden partir a hacer cosas mas impresionantes.
POLA – Principio de la Minima Sorpresa
El principio de la minima Sorpresa (Principle of
minimun astonishement - POLA) dice:
Los seres humanos por lo general se enfocan en una
sola cosa en un momento dado.
Las cosas muy novedosas o sorprendentes deben
minimizarse (o introducirse de a poco).
GUI: Elementos Basicos
Por lo general, las GUI mas populares tienen:
Puntero
Dispositivo Apuntador
Iconos
Escritorio
Ventanas
Menu
Intro a JAVAFX
OBJETIVOS: FAMILIARIZARSE CON EL SISTEMA DE PANTALLAS DE
JAVAFX
Diferentes Sabores
Java fue hecho para escribir código una vez y
correrlo en multiples arquitecturas
Pero que pasa cuando las arquitecturas tienen
diferente look and feel.
AWT – Abstract Window Toolkit
AWT nos daba una pequeña capa que exponía ventana y controles nativos a la plataforma.
En principio era Util
Sin embargo:
◦ La GUI se veía diferente en diferentes plataformas. (diferencias cosmeticas.).
◦ Diferencias (Quirks) de uso en el comportamiento e interaccion en cada plataforma.
◦ Requeria mucho conocimiento de cada plataforma para lanzar nuevos controles por parte de los
creadores del Lenguaje.
Swing
Viene del JFC (Java Foundation Classes).
Se viene de JFC desde Java 1.2 en 1998.
◦ Swing es tedioso y horrible.
Pero por debajo Swing seguía usando AWT para imput, pero en una nueva UI.
Swing tenia Skinning (Skins o pieles).
◦ Podiamos cambiar el Look de la GUI fácilmente.
Java Scene Builder: Nos permite crear interfaces sin codigo (El Scene builder escribe el FXML por
nosotros).
JavaFX - Características
WebView: Compornente que usa WebKitHTML para embeber paginas web en contenerdores JavaFX.
◦ Soporte para funcionalidades de HTML5 como webSockets está disponible desde JavaFX8.
Interoperabilidad conSwong.
Controles Embebidos.
◦ Controles propios de JavaFX que permiten desarrollar GUI complejas.
Skins (Via CSS):
◦ Permiten cambiar el look and feel (apariencia) con facilidad.
Tema Modena: Este tema de apariencia moderno es el estandart.
Graficos 3D
◦ Formas 3D (Cilindros, cajas, esferas).
◦ Iluminacion.
Canvas: Dibuja directamente sobre el lienzo!
JavaFX - Características
Soporte de Impresión
Soporte Multitouch.
Soporte de Aceleracion de Hardware Grafico.
Despliegue Autocontenido: Instalable como cualquier aplicativo de tu SO (solo da Clicks y ya).
JavaFX - Multiplataforma
Se recomienda usar Java 7 en adelante.
Como la mayoría de las plataformas (Windows, Linux, Mac) tienen disponible JDK 7 o superior,
nuestras aplicaciones hechas con JavaFX correrán bien en estos sistems.
Con JavaFX 8 (disponible desde Java 8) hay soporte para ARM (móviles).
FXML
FXML es un lenguaje de marcado para crear GUI
con JavaFX
Es similar a XML.
Especificamos Tags con propiedades, las cuales
determinaran los componentes y sus
propiedades.
MiniTest
GUI significa _________________
Al crear una aplicación JAVAFX, se vera igual en Windows y Mac?
◦ Verdadero
◦ Falso
Antes de JAVAFX cual era la manera por defecto para crear GUIs en JAVA?
◦ Swing
◦ GUI
◦ WPF
MiniTest
GUI significa GRAPHICAL USER INTERFACE.
MiniTest
Al crear una aplicación JAVAFX, se vera igual en Windows y Mac?
◦ Verdadero
◦ Falso
MiniTest
Al crear una aplicación JAVAFX, se vera igual en Windows y Mac?
◦ Verdadero
◦ Falso
MiniTest
JavaFX y Swing son lo mismo?
◦Verdadero
◦Falso
MiniTest
JavaFX y Swing son lo mismo?
◦Verdadero
◦Falso
MiniTest
Antes de JAVAFX cual era la manera por defecto para crear GUIs en JAVA?
◦ Swing
◦ GUI
◦ WPF
◦ DirectX
MiniTest
Antes de JAVAFX cual era la manera por defecto para crear GUIs en JAVA?
◦ Swing
◦ GUI
◦ WPF
◦ DirectX
JavaFX
Sirve para crear aplicaciones con interfaz grafica para:
Escritorio
RIA (Rich Internet Applications).
Soporta
Animaciones Ricas
Rendering 3D
Videos y otros medios
MultiHilos
Native Deploys (Despliegue Nativo)
Los usuarios serán capaces de instalar la aplicación como cualquier aplicación del SO.
Creamos instaladores con el correcto empaquetador (JRE correcto).
Se instala con pocos Clicks.
El teatro
El teatro presenta… JavaFX
JavaFX usa vocabulario análogo al del teatro para describir sus componentes.
Stage (Escenario): Lugar donde la audiencia visualizara la obra.
Scena (Scene): Una porción de la obra.
◦ Puede haber muchas escenas en el mismo escenario.
Codigo:
Label label = new Label(“Hola grilla”);
GridPane grilla = new GridPane();
grilla.add(label, 0, 0); //Primero la posicion Vertical y luego la horizontal
FXML VS JAVAFX CODE
FXML JAVAFX CODE
-Facil detectar errores. -Facil detectar errores.
-Permite crear elementos de manera dinámica. -Permite crear elementos de manera
-No necesito saber nada mas que java puro. dinámica.
Ventajas
-No necesito saber nada mas que java
puro.
Código
Parent root = FXMLLoader.load(getClass().getResource("EjemploGUI.fxml"));
FXML
Imports
Elementos (Nodos)
Etiqueta de Cierre
FXML
Ahora creemos una pequeña pantalla en FXML (sin el Scene Builder).
Pondremos elementos FXML en una grilla.
El diseño de la pantalla debe quedar asi, intentémoslo.
FXML: Mas informacion
Documentacion Oficial (Introduccion a FXML):
https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html
Controlador
Viene de MVC (Model-View-Controller) o mas conocido en el bajo mundo como Modelo Vista
Controlador.
MVC es un patrón de arquitectura de software muy común en frameworks (sobretodo cuando el
software tiene capa de presentación).
El controlador nos permite manejar la lógica del programa o logica de negocios (es la capa de
lógica de dominio).
El controlador permite amarrar las acciones o eventos que se presentan en la capa de
presentación a un codigo especifico en java (ata la presentación con la funcionalidad).
MVC
MVC es un patrón de diseño de software que se
utiliza para implementar software con interfaz
grafica de usuario.
Divide la aplicación en 3 partes separadas:
Modelo: Contiene los datos (nuestra
abstracción del Mundo).
Vista: Contiene la presentación de como se
muestra el modelo.
Controlador: Contiene funcionalidad que nos
permite modificar nuestro modelo.
Controlando
Es hora de amarrar nuestra vista a un controlador.
Para esto usamos en el nodo raíz la propiedad fx:controller.
En nuestro caso el nodo principal es el Grid Pane, por lo que
amarramos el controlador alli.
El controlador es una clase en Java, la cual he decido llamar
ControllerEjemplo.
Código:
GridPane fx:controller="application.ControllerEjemplo"
Luces, Camara… OnAction
Para amarrar a nuestro control a un metodo, en este caso un botón, usamos la propiedad onAction.
El valor de la propiedad onAction debe ser un metodo del controlador, cuyo nombre debe ser
antecedido por el símbolo “#”
En este caso onAction activara el metodo GenerarCedula de la clase ControllerEjemplo. El contenido de
esta clase y sus metodos es responsabilidad del controlador (capa de lógica de dominio).
Si el metodo no existiese, tendremos un error en el FXML. Dicho error se resuelve creando el metodo
(como publico).
Código:
<Button text="Generar Cedula"
…
onAction="#generarCedula"
GridPane.halignment="RIGHT" />
Accediendo a los Controles.
Para acceder a los controles (y su contenido) desde el controlador, necesitamos declararlos.
El tag o anotación @FXML permite crear los controles (se requiere importar la librería FXML).
Para que referencien a los mismos controles de la vista, estos deben tener el mismo nombre que
definimos en la propiedad id (en el FXML).
Así para declarar un TextField en el controlador, tenemos el siguiente código.
Codigo:
<GridPane fx:controller="application.ControllerEjemplo"
…
style="-fx-font-family: Papyrus; -fx-alignment: center; -fx-hgap:10; -fx-vgap: 10" >
Imponiendo Estilo (CSS)
Hojas de Estilo en Cascada o CSS.
Permiten separar aun mas nuestra capa de presentación.
◦ La estructura la da nuestro FXML.
◦ El estilo lo da el CSS.
Asi podemos establecer motivos de diseños comunes para toda la aplicación (todas las escenas).
Dichos estilos son fácilmente intercambiables.
También podemos definir estilos por cada elemento directo en FXML pero eso no es buena
practica.
Recursos
Recursos son todos aquellos archivos externos (no nativos a JAVA) en los cuales nos apoyamos
para desarrollar o desplegar la aplicación.
En la carpeta de Recursos agregaremos nuestros archivos CSS, FXML, imágenes, etc.
Agregando carpeta de Recursos
Es una practica aconsejable crear una carpeta aparte
para los recursos.
Para agregar dicha carpeta, vamos al proyecto,
damos clic derecho y seleccionamos new->folder.
Luego sobre esa carpeta, damos clic derecho y
vamos Build path -> Use as source folder.
El proceso anterior nos permitirá agregar dicha
carpeta al Build Path, para que Eclipse la tome en
cuenta como recurso.
CSS
Agregamos un archivo .css en nuestra carpeta de recursos (/recursos/css/ejemplo.css).
Si la carpeta no esta en el Build Path como source folder, la agregamos.
◦ Esto permite a eclipse encontrar los recursos.
En nuestro elemento raíz del FXML, agregamos la propiedad stylesheets, la cual referenciara a nuestra
hoja de estilos.
Código:
<GridPane fx:controller="application.ControllerEjemplo"
stylesheets="/css/ejemplo.css"
…
>
CSS
Nos permite agregar elegancia a nuestra aplicación.
STYLE
Codigo FXML:
<Text text="Cedulacion"
styleClass="titulo“
… />
Codigo CSS:
.titulo {
-fx-font-size: 80px;
-fx-fill: AQUA;
}
CSS Selectores
CSS son hojas de estilo en cascada, lo cual implica que los resultados visuales que obtendremos
variaran dependiendo del orden de aparición de los estilos y de su especificidad
Para aplicar especificidad necesitamos usar los selectores.
Los selectores permiten “Seleccionar” los elementos que caigan dentro de ciertas condiciones para
aplicar los estilos
Los selectores mas importantes son:
◦ Selector de clase: Es el punto “.” precediendo al nombre que se dara a dicha clase de CSS.
◦ Selector de Id: Es el “#” precedido del id del elemento al que se quiere aplicar el estilo.
◦ Element: selecciona el tipo de elemento descrito (nodos, por lo general controles).
◦ Global: El asterisco “*”. Selecciona todos los elementos.
Los elementos (nodos) cuyos nombres en FXML correspondan a palabras compuestas, al ser usados
en CSS para JavaFX se escribirán las palabras individuales (con minúsculas) separadas por guiones
◦ Asi GridPane (camelCase) en FXML pasa a ser .grid-pane en CSS para JavaFX
CSS para JavaFX
Mas informacion acerca de CSS especifico para JAVAFX en:
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html#typefont
https://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html
Tutoriales de CSS para JavaFX:
https://docs.oracle.com/javafx/2/layout/style_css.htm (Estilos para Layouts) (hay version en PDF)
https://docs.oracle.com/javase/8/scene-builder-2/get-started-tutorial/jfxsb-
get_started.htm#CIHBDDBI
Escogiendo Colores:
http://paletton.com/#uid=b010I4Y0kpDjukOp2nmmrsKfZvTc7 (Paletton) - Para escoger colores de
manera armonica.
QUIZ
Si un estilo es aplicado a un elemento padre, sus elementos hijos también tendrán el mismo valor
para la misma propiedad (si no se ha sobrescrito).
Verdadero
Falso
QUIZ
Si un estilo es aplicado a un elemento padre, sus elementos hijos también tendrán el mismo valor
para la misma propiedad (si no se ha sobrescrito).
Verdadero
Falso
QUIZ
Se recomienda definir los estilos y la estructura de nuestra aplicación directo en el archivo FXML
Verdadero
Falso
QUIZ
Se recomienda definir los estilos y la estructura de nuestra aplicación directo en el archivo FXML
Verdadero
Falseta
QUIZ
Que archivos se recomienda separar de nuestros archivos .java:
Ningún archivo, ponemos todo en Gajo
Solo los archivos FXML
Cualquier tipo de Archivo que pueda ser considerado un recurso.
The X-Files
QUIZ
Que archivos se recomienda separar de nuestros archivos .java:
Ningún archivo, ponemos todo en Gajo
Solo los archivos FXML
Cualquier tipo de Archivo que pueda ser considerado un recurso.
The X-Files
Barney Dice: Que aprendimos?
Amiguitos en esta unidad Revisamos:
Interfaces de Usuario: Generalidades
Interfaces Graficas de Usuario: Componentes y Caracteristicas Generales
Historia de la Evolucion de Tecnologias para la Creacion de GUIs en Java
JavaFX: Intro
JavaFX: Layouts
Configurar nuestro entorno de trabajo para usar JavaFX
JavaFX: FXML
Scene Builder
Separacion por Capas
MVC
Separacion de la Estructura y Estilo de la GUI
CSS para JavaFX
Intro a la Programacion Orientada a Eventos.
Referencias
http://docs.oracle.com/javase/8/scene-builder-2/installation-guide/jfxsb-
installation_2_0.htm#sthref6
http://www.eclipse.org/efxclipse/install.html#for-the-lazy
https://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html
https://teamtreehouse.com/library/build-a-javafx-application