CONSTRUCCIÓN
DE INTERFACES
DE USUARIO
1er Cuatrimestre de 2019
Interfaces Desktop
Multiplataforma
2
JVM JVM JVM
Windows Linux Mac
SWT
Arena
AWT
Swing
Interfaces Desktop
Arena
▸ Framework para facilitar la construcción de interfaces
Desktop desarrollado por Uqbar con fines educativos.
▸ Basado en SWT (Standard Widget Toolkit): conjunto de
componentes para construir interfaces gráficas en Java,
(widgets) desarrollados por el proyecto Eclipse.
▸ Link a Arena: http://arena.uqbar-project.org/index.html
3
Arena - Maven
<repositories>
<repository>
<id>uqbar</id>
<name>Uqbar</name>
<url>http://maven.uqbar.org/releases/</url>
</repository>
</repositories>
<parent>
<groupId>org.uqbar-project</groupId>
<artifactId>arena-xtend-parent</artifactId>
<version>3.6.3</version>
</parent>
4
Interfaces Desktop
Componentes
▸ TextBox - Input de texto
▸ Label - Etiqueta de texto
▸ Button
▸ Panels - Contenedor de componentes
▸ Windows y Dialogs
▸ Error Panel
Ver documentación Arena:
http://arena.uqbar-project.org/documentation/c
omponents.html
5
▸ Window: es la clase abstracta para todas las
ventanas
▸ MainWindow: es un tipo especial de ventana que se
usa para aplicaciones simples o de una sola ventana
▸ SimpleWindow: ventana común que agrega el
panel de errores
▸ Dialog: es una ventana final que depende de alguna
de las anteriores y que debe generar una acción y
cerrarse
Ventanas y Diálogos
6
Ejemplo - MainWindow
7
class LoginWindow : MainWindow<Login>(Login()) {
override fun createContents(panel: Panel) {
this.title = "Login del sistema"
Label(panel).setText("Ingrese el usuario")
TextBox(panel)
Label(panel).setText("Ingrese el password")
PasswordField(panel)
Button(panel).setCaption("Autenticar")
}
}
fun main() {
LoginWindow().startApplication()
}
Windows - Dialogs
8
▸ Pero las ventanas Window no pueden ser
inicializadas desde un main()como sí sucede con
MainWindow
▸ Es necesario otra estrategia de inicialización
▹ Hay que usar la clase Application
▹ Que se encarga de inicializar la aplicación y
llamar a la Window que indiquemos como
“inicial”
▹ Luego vamos a poder interactuar entre
Windows y Dialogs libremente
Application + SimpleWindows
9
class Main : Application() {
override fun createMainWindow(): MainWindow {
return MainWindow(this, User())
}
}
fun main() { Main().start() }
class MainWindow : SimpleWindow<User>{
constructor (owner: WindowOwner, model: User ) : super(owner, model)
override fun addActions(actionsPanel : Panel) { /* Actions Panel */ }
override fun createFormPanel(mainPanel : Panel) {
Label(mainPanel).setText("Prueba SimpleWindow")
}
}
Application + Dialog
10
class FormWindow : SimpleWindow<User> {
constructor (owner: WindowOwner, model: User) : super(owner, model)
override fun createFormPanel(mainPanel: Panel) {
Button(mainPanel).onClick(Action {
AddNameDialog(this, this.modelObject).open()
})
}
}
class AddNameDialog : Dialog<User> {
constructor(owner: WindowOwner, model: User ) : super(owner, model)
override fun createFormPanel(panel : Panel ) {
Label(panel).setText("Dialog Example: ")
Button(panel).setCaption("Aceptar").onClick(Action { this.close() })
}
}
Conceptos necesarios
Eventos
▸ Cualquier suceso en el sistema
▸ Comunicación entre dos componentes
▸ Inversión de la relación de conocimiento
▸ Tanto la vista como el modelo, pueden producir
eventos
11
Conceptos necesarios
Binding
▸ Vincular o enlazar propiedades del modelo con la
UI.
▸ Relaciona dos propiedades manteniendolas
sincronizadas
▸ El binding puede ser direccional o bidireccional
▸ Muchos framework proveen mecanismos de
binding.
12
En la UI podemos “bindear” una propiedad con el modelo de la
siguiente forma:
Label(panel).bindValueToPropertie<String, ControlBuilder>("user")
En el modelo con el annotation
@Observable
class Login {
var user: String = ""
}
Binding - Arena
13
14
@Observable
class Login {
var user: String = ""
set(value) { resetAuth(); field = value }
var password: String = ""
set(value) { resetAuth(); field = value }
var authenticated: Boolean = false
var authenticatedColor: Color = Color.ORANGE
fun authenticate() {
authenticated = (user == "polo") && (password == "polo")
authenticatedColor =
if (authenticated) Color.GREEN else Color.ORANGE
}
private fun resetAuth() {
authenticated = false
authenticatedColor = Color.ORANGE
}
Modelo + Binding
Windows + Binding
15
class LoginWindow : MainWindow<Login>(Login()) {
override fun createContents(panel: Panel) {
this.title = "Login del sistema"
Label(panel).setText("Ingrese el usuario")
TextBox(panel).bindValueToProperty<Int, ControlBuilder>("user")
Label(panel).setText("Ingrese el password")
PasswordField(panel).bindValueToProperty<Int, ControlBuilder>("password")
Button(panel)
.setCaption("Autenticar")
.onClick { modelObject.authenticate() }
val status = Label(panel)
status.bindValueToProperty<Double, ControlBuilder>("authenticated")
status.bindBackgroundToProperty<ControlBuilder, Any, Any>("authenticatedColor")
}
}
fun main() {
LoginWindow().startApplication()
}
16
¿Preguntas?
¿Hacemos una Demo?

Más contenido relacionado

PPT
Clase 5 JAVA 2012
PPTX
Introducción a la progrogramación orientada a objetos - Java
DOCX
Concepto de layout
PPSX
Librería swing java
Clase 5 JAVA 2012
Introducción a la progrogramación orientada a objetos - Java
Concepto de layout
Librería swing java

La actualidad más candente (19)

PPTX
Introducción a Swing
PPT
Decorator
PDF
PDF
Java
PPTX
Java - Tutorial Ventanas
PDF
Guis en java-1pp_2012_
PPTX
Interfaz gráfica de usuario y eventos (introducción)
PPTX
Java GUI La librería Swing
PPTX
Clase swing
PPTX
Elementos Swing
PDF
Diseño y validacion GUI con java usando Netbeans
DOCX
Trabajo teórico exposcición
PDF
Guia practica funciones en java con NetBeans
PDF
Guis en java-1pp_2011_
DOCX
Clase swing
PPTX
Interfaces de usuario con awt
PDF
MobileCONGalicia Introducción a Android
PDF
interfaz grafica
Introducción a Swing
Decorator
Java
Java - Tutorial Ventanas
Guis en java-1pp_2012_
Interfaz gráfica de usuario y eventos (introducción)
Java GUI La librería Swing
Clase swing
Elementos Swing
Diseño y validacion GUI con java usando Netbeans
Trabajo teórico exposcición
Guia practica funciones en java con NetBeans
Guis en java-1pp_2011_
Clase swing
Interfaces de usuario con awt
MobileCONGalicia Introducción a Android
interfaz grafica
Publicidad

Similar a 2.1. arena-y-binding (20)

PDF
Introducción al desarrollo Web: Frontend con Angular 6
PPT
Interfaces Usuario 3
PDF
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
PDF
3.1 mvc-mvvm-app model-binding
PPTX
Novedades en XAML
PPTX
javainterfazgraficaenjavausandonetbeans.pptx
PPTX
PowerShell para administradores
PDF
Android bootcamp 101 v2.0
PPTX
Windows 10: Novedades en XAML
PPTX
1TAP Tema 1-GUI.pptx
PDF
Gwt III - Avanzado
PDF
Gwt II - trabajando con gwt
PPT
Construccion a través de compontes
PDF
Laboratorio WEB GXEv3
PDF
Laboratorio WEB GXEv3
PPSX
Desarrollo De Web Parts En Share Point2007
PPTX
JAVA Interfaz gráfica (GUI)
KEY
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
PPT
Mootools Y Otros Frameworks JS
PDF
Laboratorio desarrollo de aplicaciones WEB con GeneXus Tilo
Introducción al desarrollo Web: Frontend con Angular 6
Interfaces Usuario 3
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
3.1 mvc-mvvm-app model-binding
Novedades en XAML
javainterfazgraficaenjavausandonetbeans.pptx
PowerShell para administradores
Android bootcamp 101 v2.0
Windows 10: Novedades en XAML
1TAP Tema 1-GUI.pptx
Gwt III - Avanzado
Gwt II - trabajando con gwt
Construccion a través de compontes
Laboratorio WEB GXEv3
Laboratorio WEB GXEv3
Desarrollo De Web Parts En Share Point2007
JAVA Interfaz gráfica (GUI)
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
Mootools Y Otros Frameworks JS
Laboratorio desarrollo de aplicaciones WEB con GeneXus Tilo
Publicidad

Más de xavazque2 (20)

PDF
258939538 dumping
PDF
380914324 poo-kotlin
PDF
146817358 android
PDF
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
PDF
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
PDF
325940441 motion-ui
PDF
371081023 curso-desarrollo-android
PDF
4.1. validaciones-y-excepciones
PDF
5.1. stateles stateful-protocolo_http
PDF
435338801 programacion-mobile-android
PDF
457126889 android-pdf
PDF
266521557 apuntes-unidad-formativa-app-inventor
PDF
7. react js-1
PDF
PDF
484719815 pidiendo-ayuda-a-los-angeles-pdf
PDF
484717855 transmutacion-de-energias-pdf
PDF
5.layouts
PDF
6.2. js
PDF
411958729 curso-de-delphi-pdf
PDF
3.mvc app model-valida-excep
258939538 dumping
380914324 poo-kotlin
146817358 android
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
325940441 motion-ui
371081023 curso-desarrollo-android
4.1. validaciones-y-excepciones
5.1. stateles stateful-protocolo_http
435338801 programacion-mobile-android
457126889 android-pdf
266521557 apuntes-unidad-formativa-app-inventor
7. react js-1
484719815 pidiendo-ayuda-a-los-angeles-pdf
484717855 transmutacion-de-energias-pdf
5.layouts
6.2. js
411958729 curso-de-delphi-pdf
3.mvc app model-valida-excep

Último (20)

PPT
Protocolos de seguridad y mecanismos encriptación
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
PDF
informe_fichas1y2_corregido.docx (2) (1).pdf
PPTX
Historia Inteligencia Artificial Ana Romero.pptx
PDF
capacitación de aire acondicionado Bgh r 410
DOCX
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
PDF
Guía_de_implementación_Marco_de_gobierno_y_gestión_de_TI_Universidades.pdf
PPTX
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
PPTX
ccna: redes de nat ipv4 stharlling cande
PPTX
Sistema de Gestión Integral TCA Ingenieros.pptx
PDF
Estrategia de apoyo valentina lopez/ 10-3
PPTX
El uso de las TIC en la vida cotidiana..
DOCX
Trabajo informatica joel torres 10-.....................
PPTX
Mecanismos-de-Propagacion de ondas electromagneticas
PDF
Estrategia de Apoyo de Daylin Castaño (5).pdf
PPTX
Control de calidad en productos de frutas
PDF
Final Tecno .pdfjdhdjsjdhsjshshhshshshhshhhhhhh
PDF
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
PPTX
Reconocimiento-Automatico-de-Placas-Vehiculares-con-IA.pptx
Protocolos de seguridad y mecanismos encriptación
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
informe_fichas1y2_corregido.docx (2) (1).pdf
Historia Inteligencia Artificial Ana Romero.pptx
capacitación de aire acondicionado Bgh r 410
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
Guía_de_implementación_Marco_de_gobierno_y_gestión_de_TI_Universidades.pdf
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
ccna: redes de nat ipv4 stharlling cande
Sistema de Gestión Integral TCA Ingenieros.pptx
Estrategia de apoyo valentina lopez/ 10-3
El uso de las TIC en la vida cotidiana..
Trabajo informatica joel torres 10-.....................
Mecanismos-de-Propagacion de ondas electromagneticas
Estrategia de Apoyo de Daylin Castaño (5).pdf
Control de calidad en productos de frutas
Final Tecno .pdfjdhdjsjdhsjshshhshshshhshhhhhhh
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
Reconocimiento-Automatico-de-Placas-Vehiculares-con-IA.pptx

2.1. arena-y-binding

  • 2. Interfaces Desktop Multiplataforma 2 JVM JVM JVM Windows Linux Mac SWT Arena AWT Swing
  • 3. Interfaces Desktop Arena ▸ Framework para facilitar la construcción de interfaces Desktop desarrollado por Uqbar con fines educativos. ▸ Basado en SWT (Standard Widget Toolkit): conjunto de componentes para construir interfaces gráficas en Java, (widgets) desarrollados por el proyecto Eclipse. ▸ Link a Arena: http://arena.uqbar-project.org/index.html 3
  • 5. Interfaces Desktop Componentes ▸ TextBox - Input de texto ▸ Label - Etiqueta de texto ▸ Button ▸ Panels - Contenedor de componentes ▸ Windows y Dialogs ▸ Error Panel Ver documentación Arena: http://arena.uqbar-project.org/documentation/c omponents.html 5
  • 6. ▸ Window: es la clase abstracta para todas las ventanas ▸ MainWindow: es un tipo especial de ventana que se usa para aplicaciones simples o de una sola ventana ▸ SimpleWindow: ventana común que agrega el panel de errores ▸ Dialog: es una ventana final que depende de alguna de las anteriores y que debe generar una acción y cerrarse Ventanas y Diálogos 6
  • 7. Ejemplo - MainWindow 7 class LoginWindow : MainWindow<Login>(Login()) { override fun createContents(panel: Panel) { this.title = "Login del sistema" Label(panel).setText("Ingrese el usuario") TextBox(panel) Label(panel).setText("Ingrese el password") PasswordField(panel) Button(panel).setCaption("Autenticar") } } fun main() { LoginWindow().startApplication() }
  • 8. Windows - Dialogs 8 ▸ Pero las ventanas Window no pueden ser inicializadas desde un main()como sí sucede con MainWindow ▸ Es necesario otra estrategia de inicialización ▹ Hay que usar la clase Application ▹ Que se encarga de inicializar la aplicación y llamar a la Window que indiquemos como “inicial” ▹ Luego vamos a poder interactuar entre Windows y Dialogs libremente
  • 9. Application + SimpleWindows 9 class Main : Application() { override fun createMainWindow(): MainWindow { return MainWindow(this, User()) } } fun main() { Main().start() } class MainWindow : SimpleWindow<User>{ constructor (owner: WindowOwner, model: User ) : super(owner, model) override fun addActions(actionsPanel : Panel) { /* Actions Panel */ } override fun createFormPanel(mainPanel : Panel) { Label(mainPanel).setText("Prueba SimpleWindow") } }
  • 10. Application + Dialog 10 class FormWindow : SimpleWindow<User> { constructor (owner: WindowOwner, model: User) : super(owner, model) override fun createFormPanel(mainPanel: Panel) { Button(mainPanel).onClick(Action { AddNameDialog(this, this.modelObject).open() }) } } class AddNameDialog : Dialog<User> { constructor(owner: WindowOwner, model: User ) : super(owner, model) override fun createFormPanel(panel : Panel ) { Label(panel).setText("Dialog Example: ") Button(panel).setCaption("Aceptar").onClick(Action { this.close() }) } }
  • 11. Conceptos necesarios Eventos ▸ Cualquier suceso en el sistema ▸ Comunicación entre dos componentes ▸ Inversión de la relación de conocimiento ▸ Tanto la vista como el modelo, pueden producir eventos 11
  • 12. Conceptos necesarios Binding ▸ Vincular o enlazar propiedades del modelo con la UI. ▸ Relaciona dos propiedades manteniendolas sincronizadas ▸ El binding puede ser direccional o bidireccional ▸ Muchos framework proveen mecanismos de binding. 12
  • 13. En la UI podemos “bindear” una propiedad con el modelo de la siguiente forma: Label(panel).bindValueToPropertie<String, ControlBuilder>("user") En el modelo con el annotation @Observable class Login { var user: String = "" } Binding - Arena 13
  • 14. 14 @Observable class Login { var user: String = "" set(value) { resetAuth(); field = value } var password: String = "" set(value) { resetAuth(); field = value } var authenticated: Boolean = false var authenticatedColor: Color = Color.ORANGE fun authenticate() { authenticated = (user == "polo") && (password == "polo") authenticatedColor = if (authenticated) Color.GREEN else Color.ORANGE } private fun resetAuth() { authenticated = false authenticatedColor = Color.ORANGE } Modelo + Binding
  • 15. Windows + Binding 15 class LoginWindow : MainWindow<Login>(Login()) { override fun createContents(panel: Panel) { this.title = "Login del sistema" Label(panel).setText("Ingrese el usuario") TextBox(panel).bindValueToProperty<Int, ControlBuilder>("user") Label(panel).setText("Ingrese el password") PasswordField(panel).bindValueToProperty<Int, ControlBuilder>("password") Button(panel) .setCaption("Autenticar") .onClick { modelObject.authenticate() } val status = Label(panel) status.bindValueToProperty<Double, ControlBuilder>("authenticated") status.bindBackgroundToProperty<ControlBuilder, Any, Any>("authenticatedColor") } } fun main() { LoginWindow().startApplication() }