SlideShare una empresa de Scribd logo
CONSTRUCCIÓN
DE INTERFACES
DE USUARIO
2do Cuatrimestre de 2018
4.2.
NAVEGACIÓN
WINDOWS & DIALOGS
Ventana Principal
2
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
3
class MainCompanyWindow extends MainWindow<Company> {
new(Company model) { super(model) }
static def void main(String[] arg) {
new MainCompanyWindow(new Company).startApplication
}
override createContents(Panel mainPanel) {
this.title = "Empresa"
new Label(mainPanel).text = "Empleados: "
new List<Employee>(mainPanel) => [
value <=> "empl"
(items <=> "employees")
.adaptWith(Employee, "description")
]
}
}
¿Y cómo levanto otra
ventana?
4
▸ A partir de algún evento podemos instanciar
una nueva ventana
▸ Esta ventana debe conocer a la ventana que
la invocó (solemos llamarla owner or parent)
▸ Y también debe tener un model object, el
cual debe ser “pasado” desde el parent
Tipos de Ventanas
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
Jerarquía
6
Window ⇒ Dialog
7
class MainCompanyWindow extends MainWindow<Company> {
override createContents(Panel mainPanel) {
...
new Button(mainPanel) => [
caption = "Editar"
onClick([|this.edit])
]
}
def edit() {
new EmployeeDialog(this, modelObject.employees.get(0)) => [
onAccept[this.modelObject.employees.add(
new Employee("White Walker", 0))
]
open
]
}
}
Dialog
8
class EmployeeDialog extends Dialog<Employee> {
new(WindowOwner owner, Employee model) {
super(owner, model)
}
override protected void addActions(Panel actions) {
new Button(actions) => [
caption = "Aceptar"
onClick [|this.accept]
]
new Button(actions) => [
caption = "Cancelar"
onClick [|this.cancel]
]
}
override protected createFormPanel(Panel mainPanel) {
new Label(mainPanel).text = this.modelObject.name
}
}
Window ⇒ Window
9
▸ 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
10
▸ 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
11
class MyApplication extends Application {
override protected Window<?> createMainWindow() {
new CompanyWindow(this)
}
def static main(String[] args) {
new MyApplication().start()
}
}
Window ⟺ Window
12
class CompanyWindow
extends SimpleWindow<Company> {
new(WindowOwner parent) {
super(parent, new Company)
}
override createContents(Panel mainPanel) {
this.title = "Empresa"
new Button(mainPanel) => [
caption = "Abrir Empleado"
onClick[
this.close
new EmployeeWindow(this,
this.modelObject.employees.get(0)
).open
]
]
}
}
class EmployeeWindow
extends SimpleWindow<Employee> {
new(WindowOwner owner, Employee model) {
super(owner, model)
}
override createContents(Panel mainPanel) {
this.title = "Empleado"
new Button(mainPanel) => [
caption = "Volver a Empresa"
onClick[
this.close
new CompanyWindow(this).open
]
]
}
}
Demo
13

Más contenido relacionado

PDF
3.2. layouts-windows-y-dialogs
PDF
Manejo de ventanas 2
DOC
Ejercicios_Basicos_de_netbeans (1).doc
DOC
Ejercicios_Basicos_de_netbeans (2).doc
DOC
Ejercicios_Basicos_de_netbeans (3).doc
DOC
Ejercicios_Basicos_de_netbeans.doc
DOC
J2ME Netbeans Mobility Pack - Leonardo Torres Altez
PDF
manual de Netbeans
3.2. layouts-windows-y-dialogs
Manejo de ventanas 2
Ejercicios_Basicos_de_netbeans (1).doc
Ejercicios_Basicos_de_netbeans (2).doc
Ejercicios_Basicos_de_netbeans (3).doc
Ejercicios_Basicos_de_netbeans.doc
J2ME Netbeans Mobility Pack - Leonardo Torres Altez
manual de Netbeans

Similar a 4.windows dialogs (20)

PDF
PDF
Netbeans ir.doc
PDF
MANUAL DE NETBEANS
PDF
Netbeans ir.doc
PDF
Manual netbeans_3
PDF
PDF
Netbeans ir.doc
PDF
netbeans manual 2
PDF
MANUAL
PDF
manual 15
PDF
Manualnetbeans 141006100151-conversion-gate01
PDF
2.1. arena-y-binding
PDF
Vbr Awt 01
PDF
Creando una interfaz grafica
PDF
Calculadora Gráfica Java implementando el Patrón MVC
DOC
INFOSAN Objetos del navegador
PDF
Manual 1
Netbeans ir.doc
MANUAL DE NETBEANS
Netbeans ir.doc
Manual netbeans_3
Netbeans ir.doc
netbeans manual 2
MANUAL
manual 15
Manualnetbeans 141006100151-conversion-gate01
2.1. arena-y-binding
Vbr Awt 01
Creando una interfaz grafica
Calculadora Gráfica Java implementando el Patrón MVC
INFOSAN Objetos del navegador
Manual 1
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
3.1 mvc-mvvm-app model-binding
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
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
3.1 mvc-mvvm-app model-binding
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
Publicidad

Último (20)

PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PPTX
Presentación de Redes de Datos modelo osi
PDF
Estrategia de apoyo tecnología grado 9-3
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PDF
taller de informática - LEY DE OHM
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PPTX
REDES INFORMATICAS REDES INFORMATICAS.pptx
PDF
Diapositiva proyecto de vida, materia catedra
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PDF
SAP Transportation Management para LSP, TM140 Col18
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PDF
CyberOps Associate - Cisco Networking Academy
PPT
Que son las redes de computadores y sus partes
PDF
Estrategia de apoyo tecnología miguel angel solis
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
Presentación de Redes de Datos modelo osi
Estrategia de apoyo tecnología grado 9-3
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
Sesion 1 de microsoft power point - Clase 1
Plantilla para Diseño de Narrativas Transmedia.pdf
taller de informática - LEY DE OHM
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
REDES INFORMATICAS REDES INFORMATICAS.pptx
Diapositiva proyecto de vida, materia catedra
Presentación PASANTIAS AuditorioOO..pptx
El-Gobierno-Electrónico-En-El-Estado-Bolivia
Power Point Nicolás Carrasco (disertación Roblox).pptx
SAP Transportation Management para LSP, TM140 Col18
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
CyberOps Associate - Cisco Networking Academy
Que son las redes de computadores y sus partes
Estrategia de apoyo tecnología miguel angel solis
historia_web de la creacion de un navegador_presentacion.pptx
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...

4.windows dialogs

  • 1. CONSTRUCCIÓN DE INTERFACES DE USUARIO 2do Cuatrimestre de 2018 4.2. NAVEGACIÓN WINDOWS & DIALOGS
  • 2. Ventana Principal 2 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
  • 3. Ventana Principal 3 class MainCompanyWindow extends MainWindow<Company> { new(Company model) { super(model) } static def void main(String[] arg) { new MainCompanyWindow(new Company).startApplication } override createContents(Panel mainPanel) { this.title = "Empresa" new Label(mainPanel).text = "Empleados: " new List<Employee>(mainPanel) => [ value <=> "empl" (items <=> "employees") .adaptWith(Employee, "description") ] } }
  • 4. ¿Y cómo levanto otra ventana? 4 ▸ A partir de algún evento podemos instanciar una nueva ventana ▸ Esta ventana debe conocer a la ventana que la invocó (solemos llamarla owner or parent) ▸ Y también debe tener un model object, el cual debe ser “pasado” desde el parent
  • 5. Tipos de Ventanas 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
  • 7. Window ⇒ Dialog 7 class MainCompanyWindow extends MainWindow<Company> { override createContents(Panel mainPanel) { ... new Button(mainPanel) => [ caption = "Editar" onClick([|this.edit]) ] } def edit() { new EmployeeDialog(this, modelObject.employees.get(0)) => [ onAccept[this.modelObject.employees.add( new Employee("White Walker", 0)) ] open ] } }
  • 8. Dialog 8 class EmployeeDialog extends Dialog<Employee> { new(WindowOwner owner, Employee model) { super(owner, model) } override protected void addActions(Panel actions) { new Button(actions) => [ caption = "Aceptar" onClick [|this.accept] ] new Button(actions) => [ caption = "Cancelar" onClick [|this.cancel] ] } override protected createFormPanel(Panel mainPanel) { new Label(mainPanel).text = this.modelObject.name } }
  • 9. Window ⇒ Window 9 ▸ 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.
  • 10. Window ⇒ Window 10 ▸ 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
  • 11. Application ⇒ Window 11 class MyApplication extends Application { override protected Window<?> createMainWindow() { new CompanyWindow(this) } def static main(String[] args) { new MyApplication().start() } }
  • 12. Window ⟺ Window 12 class CompanyWindow extends SimpleWindow<Company> { new(WindowOwner parent) { super(parent, new Company) } override createContents(Panel mainPanel) { this.title = "Empresa" new Button(mainPanel) => [ caption = "Abrir Empleado" onClick[ this.close new EmployeeWindow(this, this.modelObject.employees.get(0) ).open ] ] } } class EmployeeWindow extends SimpleWindow<Employee> { new(WindowOwner owner, Employee model) { super(owner, model) } override createContents(Panel mainPanel) { this.title = "Empleado" new Button(mainPanel) => [ caption = "Volver a Empresa" onClick[ this.close new CompanyWindow(this).open ] ] } }