SlideShare una empresa de Scribd logo
CONSTRUCCIÓN
DE INTERFACES
DE USUARIO
1er Cuatrimestre 2019
DISEÑO Y
NAVEGACIÓN
LAYOUTS, WINDOWS
& DIALOGS
Layout
2
▶ En español: Diseño o Disposición
▶ Define cómo se van a acomodar los
componentes visuales.
▶ No es un componente visual (no se
lo puede “ver” directamente)
Tipos de Layout
3
▶ VerticalLayout
▶ HorizontalLayout
▶ ColumnLayout
VerticalLayout
4
▶ Los componentes se disponen
verticalmente.
▶ O sea uno debajo del otro.
▶ Es la disposición por defecto.
▶ Muy útil para:
○ Ventanas simples
○ Paneles de lado
VerticalLayout ⇒
Código
5
class GeoWindow : MainWindow<GeoModel> {
constructor(model: GeoModel) : super(model)
override fun createContents(mainPanel: Panel) {
title = "Geo con Layouts"
mainPanel.setLayout(VerticalLayout())
/* ... Resto del Código... */
}
}
6
▶ Los componentes se crean uno al
lado del otro
▶ De izquiera a derecha
▶ Muy útil para:
○ Botoneras
○ Columnas de tamaño variable
HorizontalLayout
HorizontalLayout ⇒
Código
7
class KeypadWindow : MainWindow<Keypad> {
constructor(model: Keypad) : super(model)
override fun createContents(mainPanel: Panel) {
title = "Botonera"
mainPanel.setLayout(HorizontalLayout())
Button(mainPanel).setCaption("Agregar")
Button(mainPanel).setCaption("Guardar")
Button(mainPanel).setCaption("Cancelar")
}
}
ColumnLayout
8
▶ Agrupa los componentes en columnas.
▶ Se debe indicar la cantidad de columnas.
▶ Los componentes se crean uno al lado
del otro (de izq a der) hasta completar la
fila.
▶ Luego pasan a la siguiente fila.
▶ Muy útil para:
○ Formularios
○ Columnas de igual tamaño
ColumnLayout ⇒ Código
9
class FormWindow(model: Form) : MainWindow<Form>(model) {
override fun createContents(mainPanel: Panel) {
title = "Formulario"
mainPanel.setLayout(ColumnLayout(2))
Label(mainPanel).setText("Nombre:"); TextBox(mainPanel)
Label(mainPanel).setText("Apellido:"); TextBox(mainPanel)
Label(mainPanel).setText("Género:")
val selector = Selector<String>(mainPanel)
selector.bindValueToProperty<String, ControlBuilder>("genre")
selector.bindItems<String>(ObservableProperty(model, "genresList"))
}
}
@Observable class Form {
var genresList = listOf("Masculino", "Femenino", "Trans", "Otro")
var genre = "Trans"
}
Mezclando Layouts
10
Horizontal
Vertical
Columnas
¿Preguntas
hasta acá?
11
NAVEGACIÓN
WINDOWS
& DIALOGS
Ventana Principal
13
Hasta el momento venimos usando una sola
ventana:
▸ Creamos una LoQueSeaWindow que extienda
de MainWindow<T>.
▸ Definimos el constructor pasándole el
modelo.
▸ Sobreescribimos el método createContents
con el contenido.
▸ Y levantamos la aplicación desde el main.
Ventana Principal
14
class MainCompanyWindow : MainWindow<Company> {
constructor(model: Company) : super(model)
override fun createContents(mainPanel: Panel) {
title = "Empresa"
Label(mainPanel).setText("Empleados: ")
val employees = List<Employee>(mainPanel)
employees.bindValueToProperty<Employee, ControlBuilder>("empl")
employees.bindItemsToProperty("employees")
}
}
@Observable class Company {
var empl: Employee? = null
var employees = listOf(Employee("Jon Snow"), ...)
}
@Observable class Employee(private val name: String) {
override fun toString() = name
}
¿Y cómo levanto otra
ventana?
15
▸ A partir de algún evento podemos instanciar
una nueva ventana.
▸ Esta ventana debe conocer a la ventana que
la invocó (solemos llamarla owner o parent).
▸ También debe tener un modelObject que
puede ser “pasado” desde el parent.
Tipos de Ventanas
16
▸ 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.
Jerarquía
17
Window ⇒ Dialog
18
class MainCompanyWindow : MainWindow<Company> {
override fun createContents(mainPanel: Panel) {
/* … */
// Abro Dialog
Button(mainPanel)
.setCaption("Agregar White Walker")
.onClick { edit() }
}
private fun edit() {
val dialog = EmployeeDialog(this, modelObject.employees[0])
dialog.onAccept {
modelObject.employees.add(Employee("White Walker"))
}
dialog.onCancel { /* Do Nothing */ }
dialog.open()
}
}
Dialog
19
class EmployeeDialog : Dialog<Employee> {
constructor(owner WindowOwner, model: Employee) : super(owner, model)
override fun addActions(actions: Panel) {
Button(actions)
.setCaption("Aceptar")
.onClick { accept() }
Button(actions)
.setCaption("Cancelar")
.onClick { cancel() }
}
override fun createFormPanel(mainPanel: Panel) {
Label(mainPanel).setText(this.modelObject.name)
}
}
Window ⇒ Window
20
▸ Las ventanas Dialog funcionan como “modales”, o
sea que se usan para una función específica y se
cierran.
▸ Se pueden seguir abriendo ventanas o dialogs
desde un Dialog pero no es recomendable porque
se van “stackeando”.
▸ Para poder trabajar con ventanas independientes
deben ser Window o SimpleWindow.
▸ Una MainWindow puede abrir una Window pero luego
nunca más se puede volver a la MainWindow.
Window ⇒ Window
21
▸ Pero las ventanas Window no pueden ser inicializadas
desde un main() como sí sucedía 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 ⇒ Window
22
fun main() = MyApplication().start()
class MyApplication : Application() {
override fun createMainWindow(): Window<*> {
CompanyWindow(this, Company())
}
}
Window ⟺ Window
23
class CompanyWindow : SimpleWindow<Company> {
constructor(parent: WindowOwner, model: Company) {
super(parent, model)
}
override fun addActions(actionsPanel: Panel) {}
override fun createFormPanel(mainPanel: Panel) {}
override fun createContents(mainPanel: Panel) {
title = "Empresa"
Button(mainPanel)
.setCaption("Abrir Empleado")
.onClick {
close()
EmployeeWindow(
this,
modelObject.employees[0]
).open()
}
}
}
class EmployeeWindow : SimpleWindow<Employee> {
constructor(owner: WindowOwner, model: Employee) {
super(owner, model)
}
override fun addActions(actionsPanel: Panel) {}
override fun createFormPanel(mainPanel: Panel) {}
override fun createContents(mainPanel: Panel) {
title = "Empleado"
Button(mainPanel)
.setCaption("Volver a Empresa")
.onClick {
close()
CompanyWindow(
this,
Company()
).open()
}
}
}
Demo
24

Más contenido relacionado

La actualidad más candente

Como insertar una radio en blog
Como insertar una radio en blogComo insertar una radio en blog
Como insertar una radio en blog
Milko Galvez Angel
 
Cinemagraph
CinemagraphCinemagraph
Cinemagraph
barbarasadee
 
Manual marichuy
Manual marichuyManual marichuy
Java – ejercicio 3
Java – ejercicio 3Java – ejercicio 3
Java – ejercicio 3
ayreonmx
 
Ver y no_ver_(informe_21)
Ver y no_ver_(informe_21)Ver y no_ver_(informe_21)
Ver y no_ver_(informe_21)
Carlos Guzmán
 
VB 6.0
VB 6.0VB 6.0
VB 6.0
Alan Morales
 
Manual de bluej
Manual de bluejManual de bluej
Manual de bluej
K Manuel TN
 
programacion
programacionprogramacion
programacion
Domingo Mendez
 
Pagina 62 a 65
Pagina 62 a 65Pagina 62 a 65
Pagina 62 a 65
vargastor
 
Depuradores Guía rapida de uso
Depuradores Guía rapida de usoDepuradores Guía rapida de uso
Depuradores Guía rapida de uso
Miguel Angel Lopez Torralba
 

La actualidad más candente (10)

Como insertar una radio en blog
Como insertar una radio en blogComo insertar una radio en blog
Como insertar una radio en blog
 
Cinemagraph
CinemagraphCinemagraph
Cinemagraph
 
Manual marichuy
Manual marichuyManual marichuy
Manual marichuy
 
Java – ejercicio 3
Java – ejercicio 3Java – ejercicio 3
Java – ejercicio 3
 
Ver y no_ver_(informe_21)
Ver y no_ver_(informe_21)Ver y no_ver_(informe_21)
Ver y no_ver_(informe_21)
 
VB 6.0
VB 6.0VB 6.0
VB 6.0
 
Manual de bluej
Manual de bluejManual de bluej
Manual de bluej
 
programacion
programacionprogramacion
programacion
 
Pagina 62 a 65
Pagina 62 a 65Pagina 62 a 65
Pagina 62 a 65
 
Depuradores Guía rapida de uso
Depuradores Guía rapida de usoDepuradores Guía rapida de uso
Depuradores Guía rapida de uso
 

Similar a 3.2. layouts-windows-y-dialogs

Articulo programacion java (1)
Articulo programacion  java (1)Articulo programacion  java (1)
Articulo programacion java (1)
I.S.T. Santo Domingo
 
COMANDOS MACROS.pdf
COMANDOS MACROS.pdfCOMANDOS MACROS.pdf
COMANDOS MACROS.pdf
osorvilo
 
Visual basic 6
Visual basic 6Visual basic 6
Visual basic 6
solucionesinformaticas
 
Swing (1)
Swing (1)Swing (1)
Swing (1)
jbersosa
 
Diseño de moldes con solidworks
Diseño de moldes con solidworksDiseño de moldes con solidworks
Diseño de moldes con solidworks
Gabriel Vazquez
 
Practica
PracticaPractica
Practica
jbersosa
 
Practica
PracticaPractica
Practica
jbersosa
 
Vbr Awt 01
Vbr Awt 01Vbr Awt 01
Vbr Awt 01
Carlos Luna
 
Microsoft Acces_Panel de Control
Microsoft Acces_Panel de ControlMicrosoft Acces_Panel de Control
Microsoft Acces_Panel de Control
fer_n97
 
Curso de autocad civ
Curso de autocad civCurso de autocad civ
Curso de autocad civ
ragchewer
 
2.1. arena-y-binding
2.1. arena-y-binding2.1. arena-y-binding
2.1. arena-y-binding
xavazque2
 
Decorator
DecoratorDecorator
Decorator
Mario Rodriguez
 
12swing gui
12swing gui12swing gui
12swing gui
Oscar Sanchez
 
Guia practicaiuprg3
Guia practicaiuprg3Guia practicaiuprg3
Guia practicaiuprg3
alex sgarcia
 
Manual de i talc
Manual de i talcManual de i talc
Manual de i talc
Nancy Gutiérrez
 
1TAP Tema 1-GUI.pptx
1TAP Tema 1-GUI.pptx1TAP Tema 1-GUI.pptx
1TAP Tema 1-GUI.pptx
ATM_SSI
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
Ayhli123
 
Plan menus swing
Plan menus swingPlan menus swing
Plan menus swing
Alice5253
 
Unidad jme-02--ingbarcia-final
Unidad jme-02--ingbarcia-finalUnidad jme-02--ingbarcia-final
Unidad jme-02--ingbarcia-final
Orlando Barcia
 
Manual de power point
Manual de power pointManual de power point
Manual de power point
yuvi_luna
 

Similar a 3.2. layouts-windows-y-dialogs (20)

Articulo programacion java (1)
Articulo programacion  java (1)Articulo programacion  java (1)
Articulo programacion java (1)
 
COMANDOS MACROS.pdf
COMANDOS MACROS.pdfCOMANDOS MACROS.pdf
COMANDOS MACROS.pdf
 
Visual basic 6
Visual basic 6Visual basic 6
Visual basic 6
 
Swing (1)
Swing (1)Swing (1)
Swing (1)
 
Diseño de moldes con solidworks
Diseño de moldes con solidworksDiseño de moldes con solidworks
Diseño de moldes con solidworks
 
Practica
PracticaPractica
Practica
 
Practica
PracticaPractica
Practica
 
Vbr Awt 01
Vbr Awt 01Vbr Awt 01
Vbr Awt 01
 
Microsoft Acces_Panel de Control
Microsoft Acces_Panel de ControlMicrosoft Acces_Panel de Control
Microsoft Acces_Panel de Control
 
Curso de autocad civ
Curso de autocad civCurso de autocad civ
Curso de autocad civ
 
2.1. arena-y-binding
2.1. arena-y-binding2.1. arena-y-binding
2.1. arena-y-binding
 
Decorator
DecoratorDecorator
Decorator
 
12swing gui
12swing gui12swing gui
12swing gui
 
Guia practicaiuprg3
Guia practicaiuprg3Guia practicaiuprg3
Guia practicaiuprg3
 
Manual de i talc
Manual de i talcManual de i talc
Manual de i talc
 
1TAP Tema 1-GUI.pptx
1TAP Tema 1-GUI.pptx1TAP Tema 1-GUI.pptx
1TAP Tema 1-GUI.pptx
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Plan menus swing
Plan menus swingPlan menus swing
Plan menus swing
 
Unidad jme-02--ingbarcia-final
Unidad jme-02--ingbarcia-finalUnidad jme-02--ingbarcia-final
Unidad jme-02--ingbarcia-final
 
Manual de power point
Manual de power pointManual de power point
Manual de power point
 

Más de xavazque2

258939538 dumping
258939538 dumping258939538 dumping
258939538 dumping
xavazque2
 
380914324 poo-kotlin
380914324 poo-kotlin380914324 poo-kotlin
380914324 poo-kotlin
xavazque2
 
146817358 android
146817358 android146817358 android
146817358 android
xavazque2
 
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlinCurso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
xavazque2
 
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
xavazque2
 
325940441 motion-ui
325940441 motion-ui325940441 motion-ui
325940441 motion-ui
xavazque2
 
371081023 curso-desarrollo-android
371081023 curso-desarrollo-android371081023 curso-desarrollo-android
371081023 curso-desarrollo-android
xavazque2
 
4.1. validaciones-y-excepciones
4.1. validaciones-y-excepciones4.1. validaciones-y-excepciones
4.1. validaciones-y-excepciones
xavazque2
 
5.1. stateles stateful-protocolo_http
5.1. stateles stateful-protocolo_http5.1. stateles stateful-protocolo_http
5.1. stateles stateful-protocolo_http
xavazque2
 
435338801 programacion-mobile-android
435338801 programacion-mobile-android435338801 programacion-mobile-android
435338801 programacion-mobile-android
xavazque2
 
457126889 android-pdf
457126889 android-pdf457126889 android-pdf
457126889 android-pdf
xavazque2
 
266521557 apuntes-unidad-formativa-app-inventor
266521557 apuntes-unidad-formativa-app-inventor266521557 apuntes-unidad-formativa-app-inventor
266521557 apuntes-unidad-formativa-app-inventor
xavazque2
 
7. react js-1
7. react js-17. react js-1
7. react js-1
xavazque2
 
Tp1
Tp1Tp1
484719815 pidiendo-ayuda-a-los-angeles-pdf
484719815 pidiendo-ayuda-a-los-angeles-pdf484719815 pidiendo-ayuda-a-los-angeles-pdf
484719815 pidiendo-ayuda-a-los-angeles-pdf
xavazque2
 
484717855 transmutacion-de-energias-pdf
484717855 transmutacion-de-energias-pdf484717855 transmutacion-de-energias-pdf
484717855 transmutacion-de-energias-pdf
xavazque2
 
5.layouts
5.layouts5.layouts
5.layouts
xavazque2
 
6.2. js
6.2. js6.2. js
6.2. js
xavazque2
 
411958729 curso-de-delphi-pdf
411958729 curso-de-delphi-pdf411958729 curso-de-delphi-pdf
411958729 curso-de-delphi-pdf
xavazque2
 
3.mvc app model-valida-excep
3.mvc app model-valida-excep3.mvc app model-valida-excep
3.mvc app model-valida-excep
xavazque2
 

Más de xavazque2 (20)

258939538 dumping
258939538 dumping258939538 dumping
258939538 dumping
 
380914324 poo-kotlin
380914324 poo-kotlin380914324 poo-kotlin
380914324 poo-kotlin
 
146817358 android
146817358 android146817358 android
146817358 android
 
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlinCurso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
 
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
 
325940441 motion-ui
325940441 motion-ui325940441 motion-ui
325940441 motion-ui
 
371081023 curso-desarrollo-android
371081023 curso-desarrollo-android371081023 curso-desarrollo-android
371081023 curso-desarrollo-android
 
4.1. validaciones-y-excepciones
4.1. validaciones-y-excepciones4.1. validaciones-y-excepciones
4.1. validaciones-y-excepciones
 
5.1. stateles stateful-protocolo_http
5.1. stateles stateful-protocolo_http5.1. stateles stateful-protocolo_http
5.1. stateles stateful-protocolo_http
 
435338801 programacion-mobile-android
435338801 programacion-mobile-android435338801 programacion-mobile-android
435338801 programacion-mobile-android
 
457126889 android-pdf
457126889 android-pdf457126889 android-pdf
457126889 android-pdf
 
266521557 apuntes-unidad-formativa-app-inventor
266521557 apuntes-unidad-formativa-app-inventor266521557 apuntes-unidad-formativa-app-inventor
266521557 apuntes-unidad-formativa-app-inventor
 
7. react js-1
7. react js-17. react js-1
7. react js-1
 
Tp1
Tp1Tp1
Tp1
 
484719815 pidiendo-ayuda-a-los-angeles-pdf
484719815 pidiendo-ayuda-a-los-angeles-pdf484719815 pidiendo-ayuda-a-los-angeles-pdf
484719815 pidiendo-ayuda-a-los-angeles-pdf
 
484717855 transmutacion-de-energias-pdf
484717855 transmutacion-de-energias-pdf484717855 transmutacion-de-energias-pdf
484717855 transmutacion-de-energias-pdf
 
5.layouts
5.layouts5.layouts
5.layouts
 
6.2. js
6.2. js6.2. js
6.2. js
 
411958729 curso-de-delphi-pdf
411958729 curso-de-delphi-pdf411958729 curso-de-delphi-pdf
411958729 curso-de-delphi-pdf
 
3.mvc app model-valida-excep
3.mvc app model-valida-excep3.mvc app model-valida-excep
3.mvc app model-valida-excep
 

Último

Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Festibity
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
cristianrb0324
 
Trabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De ProgramaciónTrabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De Programación
SofiaCollazos
 
IA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticulturaIA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticultura
Miguel Rebollo
 
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial ValenciaCatalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
AMADO SALVADOR
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
YaniEscobar2
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
mantenimientocarbra6
 
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
bendezuperezjimena
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
JimmyTejadaSalizar
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
julio05042006
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
Festibity
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
cbtechchihuahua
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
NajwaNimri1
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
LilibethEstupian
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
sofiahuarancabellido
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
AMADO SALVADOR
 
Presentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The CleanPresentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The Clean
juanchogame18
 
algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1
yuki22434
 

Último (20)

Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
 
Trabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De ProgramaciónTrabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De Programación
 
IA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticulturaIA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticultura
 
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial ValenciaCatalogo general Ariston Amado Salvador distribuidor oficial Valencia
Catalogo general Ariston Amado Salvador distribuidor oficial Valencia
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
 
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
 
Presentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The CleanPresentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The Clean
 
algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1
 

3.2. layouts-windows-y-dialogs

  • 1. CONSTRUCCIÓN DE INTERFACES DE USUARIO 1er Cuatrimestre 2019 DISEÑO Y NAVEGACIÓN LAYOUTS, WINDOWS & DIALOGS
  • 2. Layout 2 ▶ En español: Diseño o Disposición ▶ Define cómo se van a acomodar los componentes visuales. ▶ No es un componente visual (no se lo puede “ver” directamente)
  • 3. Tipos de Layout 3 ▶ VerticalLayout ▶ HorizontalLayout ▶ ColumnLayout
  • 4. VerticalLayout 4 ▶ Los componentes se disponen verticalmente. ▶ O sea uno debajo del otro. ▶ Es la disposición por defecto. ▶ Muy útil para: ○ Ventanas simples ○ Paneles de lado
  • 5. VerticalLayout ⇒ Código 5 class GeoWindow : MainWindow<GeoModel> { constructor(model: GeoModel) : super(model) override fun createContents(mainPanel: Panel) { title = "Geo con Layouts" mainPanel.setLayout(VerticalLayout()) /* ... Resto del Código... */ } }
  • 6. 6 ▶ Los componentes se crean uno al lado del otro ▶ De izquiera a derecha ▶ Muy útil para: ○ Botoneras ○ Columnas de tamaño variable HorizontalLayout
  • 7. HorizontalLayout ⇒ Código 7 class KeypadWindow : MainWindow<Keypad> { constructor(model: Keypad) : super(model) override fun createContents(mainPanel: Panel) { title = "Botonera" mainPanel.setLayout(HorizontalLayout()) Button(mainPanel).setCaption("Agregar") Button(mainPanel).setCaption("Guardar") Button(mainPanel).setCaption("Cancelar") } }
  • 8. ColumnLayout 8 ▶ Agrupa los componentes en columnas. ▶ Se debe indicar la cantidad de columnas. ▶ Los componentes se crean uno al lado del otro (de izq a der) hasta completar la fila. ▶ Luego pasan a la siguiente fila. ▶ Muy útil para: ○ Formularios ○ Columnas de igual tamaño
  • 9. ColumnLayout ⇒ Código 9 class FormWindow(model: Form) : MainWindow<Form>(model) { override fun createContents(mainPanel: Panel) { title = "Formulario" mainPanel.setLayout(ColumnLayout(2)) Label(mainPanel).setText("Nombre:"); TextBox(mainPanel) Label(mainPanel).setText("Apellido:"); TextBox(mainPanel) Label(mainPanel).setText("Género:") val selector = Selector<String>(mainPanel) selector.bindValueToProperty<String, ControlBuilder>("genre") selector.bindItems<String>(ObservableProperty(model, "genresList")) } } @Observable class Form { var genresList = listOf("Masculino", "Femenino", "Trans", "Otro") var genre = "Trans" }
  • 13. Ventana Principal 13 Hasta el momento venimos usando una sola ventana: ▸ Creamos una LoQueSeaWindow que extienda de MainWindow<T>. ▸ Definimos el constructor pasándole el modelo. ▸ Sobreescribimos el método createContents con el contenido. ▸ Y levantamos la aplicación desde el main.
  • 14. Ventana Principal 14 class MainCompanyWindow : MainWindow<Company> { constructor(model: Company) : super(model) override fun createContents(mainPanel: Panel) { title = "Empresa" Label(mainPanel).setText("Empleados: ") val employees = List<Employee>(mainPanel) employees.bindValueToProperty<Employee, ControlBuilder>("empl") employees.bindItemsToProperty("employees") } } @Observable class Company { var empl: Employee? = null var employees = listOf(Employee("Jon Snow"), ...) } @Observable class Employee(private val name: String) { override fun toString() = name }
  • 15. ¿Y cómo levanto otra ventana? 15 ▸ A partir de algún evento podemos instanciar una nueva ventana. ▸ Esta ventana debe conocer a la ventana que la invocó (solemos llamarla owner o parent). ▸ También debe tener un modelObject que puede ser “pasado” desde el parent.
  • 16. Tipos de Ventanas 16 ▸ 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.
  • 18. Window ⇒ Dialog 18 class MainCompanyWindow : MainWindow<Company> { override fun createContents(mainPanel: Panel) { /* … */ // Abro Dialog Button(mainPanel) .setCaption("Agregar White Walker") .onClick { edit() } } private fun edit() { val dialog = EmployeeDialog(this, modelObject.employees[0]) dialog.onAccept { modelObject.employees.add(Employee("White Walker")) } dialog.onCancel { /* Do Nothing */ } dialog.open() } }
  • 19. Dialog 19 class EmployeeDialog : Dialog<Employee> { constructor(owner WindowOwner, model: Employee) : super(owner, model) override fun addActions(actions: Panel) { Button(actions) .setCaption("Aceptar") .onClick { accept() } Button(actions) .setCaption("Cancelar") .onClick { cancel() } } override fun createFormPanel(mainPanel: Panel) { Label(mainPanel).setText(this.modelObject.name) } }
  • 20. Window ⇒ Window 20 ▸ Las ventanas Dialog funcionan como “modales”, o sea que se usan para una función específica y se cierran. ▸ Se pueden seguir abriendo ventanas o dialogs desde un Dialog pero no es recomendable porque se van “stackeando”. ▸ Para poder trabajar con ventanas independientes deben ser Window o SimpleWindow. ▸ Una MainWindow puede abrir una Window pero luego nunca más se puede volver a la MainWindow.
  • 21. Window ⇒ Window 21 ▸ Pero las ventanas Window no pueden ser inicializadas desde un main() como sí sucedía 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
  • 22. Application ⇒ Window 22 fun main() = MyApplication().start() class MyApplication : Application() { override fun createMainWindow(): Window<*> { CompanyWindow(this, Company()) } }
  • 23. Window ⟺ Window 23 class CompanyWindow : SimpleWindow<Company> { constructor(parent: WindowOwner, model: Company) { super(parent, model) } override fun addActions(actionsPanel: Panel) {} override fun createFormPanel(mainPanel: Panel) {} override fun createContents(mainPanel: Panel) { title = "Empresa" Button(mainPanel) .setCaption("Abrir Empleado") .onClick { close() EmployeeWindow( this, modelObject.employees[0] ).open() } } } class EmployeeWindow : SimpleWindow<Employee> { constructor(owner: WindowOwner, model: Employee) { super(owner, model) } override fun addActions(actionsPanel: Panel) {} override fun createFormPanel(mainPanel: Panel) {} override fun createContents(mainPanel: Panel) { title = "Empleado" Button(mainPanel) .setCaption("Volver a Empresa") .onClick { close() CompanyWindow( this, Company() ).open() } } }