├── .gitignore ├── Clase6 ├── bin │ └── app │ │ ├── App.class │ │ ├── App$1.class │ │ ├── client │ │ ├── login │ │ │ ├── LoginTemplate.class │ │ │ └── LoginComponent.class │ │ ├── components │ │ │ ├── amigos │ │ │ │ ├── AmigosComponent.class │ │ │ │ └── AmigosTemplate.class │ │ │ ├── inicio │ │ │ │ ├── InicioComponent.class │ │ │ │ └── InicioTemplate.class │ │ │ ├── perfil │ │ │ │ ├── PerfilComponent.class │ │ │ │ └── PerfilTemplate.class │ │ │ ├── productos │ │ │ │ ├── ProductosComponent.class │ │ │ │ └── ProductosTemplate.class │ │ │ ├── barraTitulo │ │ │ │ ├── BarraTituloComponent.class │ │ │ │ └── BarraTituloTemplate.class │ │ │ ├── configuraciones │ │ │ │ ├── ConfiguracionesComponent.class │ │ │ │ └── ConfiguracionesTemplate.class │ │ │ └── navegacionUsuario │ │ │ │ ├── NavegacionUsuarioTemplate.class │ │ │ │ └── NavegacionUsuarioComponent.class │ │ └── vistaPrincipal │ │ │ ├── VistaPrincipalComponent.class │ │ │ └── VistaPrincipalTemplate.class │ │ └── services │ │ ├── RecursosService.class │ │ └── ObjGraficosService.class ├── resources │ ├── fonts │ │ └── LUZRO.TTF │ └── images │ │ ├── logo.png │ │ ├── amigos.png │ │ ├── cerrar.png │ │ ├── clave2.png │ │ ├── fondo.png │ │ ├── inicio.png │ │ ├── perfil.png │ │ ├── punto1.png │ │ ├── salir.png │ │ ├── facebook1.png │ │ ├── imagen1.png │ │ ├── logo_app.png │ │ ├── minimizar.png │ │ ├── productos.png │ │ ├── twitter1.png │ │ ├── usuario2.png │ │ ├── youtube1.png │ │ ├── configuracion.png │ │ ├── perfiles │ │ └── perfil1.png │ │ └── usuario_navegacion.png ├── .classpath ├── src │ └── app │ │ ├── client │ │ ├── components │ │ │ ├── amigos │ │ │ │ ├── AmigosComponent.java │ │ │ │ └── AmigosTemplate.java │ │ │ ├── perfil │ │ │ │ ├── PerfilComponent.java │ │ │ │ └── PerfilTemplate.java │ │ │ ├── inicio │ │ │ │ ├── InicioComponent.java │ │ │ │ └── InicioTemplate.java │ │ │ ├── productos │ │ │ │ ├── ProductosComponent.java │ │ │ │ └── ProductosTemplate.java │ │ │ ├── configuraciones │ │ │ │ ├── ConfiguracionesComponent.java │ │ │ │ └── ConfiguracionesTemplate.java │ │ │ ├── navegacionUsuario │ │ │ │ ├── NavegacionUsuarioComponent.java │ │ │ │ └── NavegacionUsuarioTemplate.java │ │ │ └── barraTitulo │ │ │ │ ├── BarraTituloComponent.java │ │ │ │ └── BarraTituloTemplate.java │ │ ├── vistaPrincipal │ │ │ ├── VistaPrincipalTemplate.java │ │ │ └── VistaPrincipalComponent.java │ │ └── login │ │ │ ├── LoginComponent.java │ │ │ └── LoginTemplate.java │ │ ├── App.java │ │ └── services │ │ ├── RecursosService.java │ │ └── ObjGraficosService.java ├── .settings │ └── org.eclipse.jdt.core.prefs └── .project ├── .vscode └── settings.json └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | /resources -------------------------------------------------------------------------------- /Clase6/bin/app/App.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/App.class -------------------------------------------------------------------------------- /Clase6/bin/app/App$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/App$1.class -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cSpell.words": [ 3 | "ejecucion", 4 | "png", 5 | "resources" 6 | ] 7 | } -------------------------------------------------------------------------------- /Clase6/resources/fonts/LUZRO.TTF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/fonts/LUZRO.TTF -------------------------------------------------------------------------------- /Clase6/resources/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/logo.png -------------------------------------------------------------------------------- /Clase6/resources/images/amigos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/amigos.png -------------------------------------------------------------------------------- /Clase6/resources/images/cerrar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/cerrar.png -------------------------------------------------------------------------------- /Clase6/resources/images/clave2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/clave2.png -------------------------------------------------------------------------------- /Clase6/resources/images/fondo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/fondo.png -------------------------------------------------------------------------------- /Clase6/resources/images/inicio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/inicio.png -------------------------------------------------------------------------------- /Clase6/resources/images/perfil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/perfil.png -------------------------------------------------------------------------------- /Clase6/resources/images/punto1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/punto1.png -------------------------------------------------------------------------------- /Clase6/resources/images/salir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/salir.png -------------------------------------------------------------------------------- /Clase6/resources/images/facebook1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/facebook1.png -------------------------------------------------------------------------------- /Clase6/resources/images/imagen1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/imagen1.png -------------------------------------------------------------------------------- /Clase6/resources/images/logo_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/logo_app.png -------------------------------------------------------------------------------- /Clase6/resources/images/minimizar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/minimizar.png -------------------------------------------------------------------------------- /Clase6/resources/images/productos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/productos.png -------------------------------------------------------------------------------- /Clase6/resources/images/twitter1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/twitter1.png -------------------------------------------------------------------------------- /Clase6/resources/images/usuario2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/usuario2.png -------------------------------------------------------------------------------- /Clase6/resources/images/youtube1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/youtube1.png -------------------------------------------------------------------------------- /Clase6/resources/images/configuracion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/configuracion.png -------------------------------------------------------------------------------- /Clase6/resources/images/perfiles/perfil1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/perfiles/perfil1.png -------------------------------------------------------------------------------- /Clase6/bin/app/client/login/LoginTemplate.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/login/LoginTemplate.class -------------------------------------------------------------------------------- /Clase6/bin/app/services/RecursosService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/services/RecursosService.class -------------------------------------------------------------------------------- /Clase6/resources/images/usuario_navegacion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/resources/images/usuario_navegacion.png -------------------------------------------------------------------------------- /Clase6/bin/app/client/login/LoginComponent.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/login/LoginComponent.class -------------------------------------------------------------------------------- /Clase6/bin/app/services/ObjGraficosService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/services/ObjGraficosService.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/components/amigos/AmigosComponent.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/components/amigos/AmigosComponent.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/components/amigos/AmigosTemplate.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/components/amigos/AmigosTemplate.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/components/inicio/InicioComponent.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/components/inicio/InicioComponent.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/components/inicio/InicioTemplate.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/components/inicio/InicioTemplate.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/components/perfil/PerfilComponent.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/components/perfil/PerfilComponent.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/components/perfil/PerfilTemplate.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/components/perfil/PerfilTemplate.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/components/productos/ProductosComponent.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/components/productos/ProductosComponent.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/components/productos/ProductosTemplate.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/components/productos/ProductosTemplate.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/vistaPrincipal/VistaPrincipalComponent.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/vistaPrincipal/VistaPrincipalComponent.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/vistaPrincipal/VistaPrincipalTemplate.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/vistaPrincipal/VistaPrincipalTemplate.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/components/barraTitulo/BarraTituloComponent.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/components/barraTitulo/BarraTituloComponent.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/components/barraTitulo/BarraTituloTemplate.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/components/barraTitulo/BarraTituloTemplate.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/components/configuraciones/ConfiguracionesComponent.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/components/configuraciones/ConfiguracionesComponent.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/components/configuraciones/ConfiguracionesTemplate.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/components/configuraciones/ConfiguracionesTemplate.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/components/navegacionUsuario/NavegacionUsuarioTemplate.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/components/navegacionUsuario/NavegacionUsuarioTemplate.class -------------------------------------------------------------------------------- /Clase6/bin/app/client/components/navegacionUsuario/NavegacionUsuarioComponent.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrissUD/InterfazGraficaJavaClase6/HEAD/Clase6/bin/app/client/components/navegacionUsuario/NavegacionUsuarioComponent.class -------------------------------------------------------------------------------- /Clase6/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Clase6/src/app/client/components/amigos/AmigosComponent.java: -------------------------------------------------------------------------------- 1 | package app.client.components.amigos; 2 | 3 | public class AmigosComponent { 4 | private AmigosTemplate amigosTemplate; 5 | 6 | public AmigosComponent() { 7 | amigosTemplate = new AmigosTemplate(this); 8 | } 9 | 10 | public AmigosTemplate getAmigosTemplate() { 11 | return amigosTemplate; 12 | } 13 | } -------------------------------------------------------------------------------- /Clase6/src/app/client/components/perfil/PerfilComponent.java: -------------------------------------------------------------------------------- 1 | package app.client.components.perfil; 2 | 3 | public class PerfilComponent { 4 | private PerfilTemplate perfilTemplate; 5 | 6 | public PerfilComponent() { 7 | perfilTemplate = new PerfilTemplate(this); 8 | } 9 | 10 | public PerfilTemplate getPerfilTemplate() { 11 | return perfilTemplate; 12 | } 13 | } -------------------------------------------------------------------------------- /Clase6/src/app/client/components/inicio/InicioComponent.java: -------------------------------------------------------------------------------- 1 | package app.client.components.inicio; 2 | 3 | public class InicioComponent { 4 | private InicioTemplate inicioTemplate; 5 | 6 | public InicioComponent() { 7 | this.inicioTemplate = new InicioTemplate(this); 8 | } 9 | 10 | public InicioTemplate getInicioTemplate() { 11 | return this.inicioTemplate; 12 | } 13 | } -------------------------------------------------------------------------------- /Clase6/src/app/client/components/productos/ProductosComponent.java: -------------------------------------------------------------------------------- 1 | package app.client.components.productos; 2 | 3 | public class ProductosComponent { 4 | private ProductosTemplate productosTemplate; 5 | 6 | public ProductosComponent() { 7 | productosTemplate = new ProductosTemplate(this); 8 | } 9 | 10 | public ProductosTemplate getProductosTemplate() { 11 | return productosTemplate; 12 | } 13 | } -------------------------------------------------------------------------------- /Clase6/src/app/App.java: -------------------------------------------------------------------------------- 1 | package app; 2 | 3 | import javax.swing.SwingUtilities; 4 | 5 | import app.client.login.LoginComponent; 6 | 7 | public class App { 8 | public static void main(String[] args) { 9 | Runnable runApplication = new Runnable() { 10 | public void run() { 11 | LoginComponent login = new LoginComponent(); 12 | login.getClass(); 13 | } 14 | }; 15 | SwingUtilities.invokeLater(runApplication); 16 | } 17 | } -------------------------------------------------------------------------------- /Clase6/src/app/client/components/configuraciones/ConfiguracionesComponent.java: -------------------------------------------------------------------------------- 1 | package app.client.components.configuraciones; 2 | 3 | public class ConfiguracionesComponent { 4 | private ConfiguracionesTemplate configuracionesTemplate; 5 | 6 | public ConfiguracionesComponent() { 7 | 8 | configuracionesTemplate = new ConfiguracionesTemplate(this); 9 | } 10 | 11 | public ConfiguracionesTemplate getConfiguracionesTemplate() { 12 | return configuracionesTemplate; 13 | } 14 | } -------------------------------------------------------------------------------- /Clase6/src/app/client/components/perfil/PerfilTemplate.java: -------------------------------------------------------------------------------- 1 | package app.client.components.perfil; 2 | 3 | import java.awt.Color; 4 | import javax.swing.JPanel; 5 | 6 | public class PerfilTemplate extends JPanel { 7 | private static final long serialVersionUID = 1L; 8 | 9 | private PerfilComponent perfilComponent; 10 | 11 | public PerfilTemplate(PerfilComponent perfilComponent) { 12 | this.perfilComponent = perfilComponent; 13 | this.perfilComponent.getClass(); 14 | 15 | this.setSize(850, 600); 16 | this.setBackground(Color.RED); 17 | this.setLayout(null); 18 | this.setVisible(true); 19 | } 20 | } -------------------------------------------------------------------------------- /Clase6/src/app/client/components/amigos/AmigosTemplate.java: -------------------------------------------------------------------------------- 1 | package app.client.components.amigos; 2 | 3 | import javax.swing.JPanel; 4 | import java.awt.Color; 5 | 6 | public class AmigosTemplate extends JPanel { 7 | private static final long serialVersionUID = 1L; 8 | 9 | private AmigosComponent amigosComponent; 10 | 11 | public AmigosTemplate(AmigosComponent amigosComponent) { 12 | 13 | this.amigosComponent = amigosComponent; 14 | this.amigosComponent.getClass(); 15 | 16 | this.setSize(850, 600); 17 | this.setBackground(Color.GREEN); 18 | this.setLayout(null); 19 | this.setVisible(true); 20 | } 21 | } -------------------------------------------------------------------------------- /Clase6/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=10 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=11 12 | -------------------------------------------------------------------------------- /Clase6/src/app/client/components/productos/ProductosTemplate.java: -------------------------------------------------------------------------------- 1 | package app.client.components.productos; 2 | 3 | import javax.swing.JPanel; 4 | import java.awt.Color; 5 | 6 | public class ProductosTemplate extends JPanel { 7 | private static final long serialVersionUID = 1L; 8 | 9 | private ProductosComponent productosComponent; 10 | 11 | public ProductosTemplate(ProductosComponent productosComponent) { 12 | this.productosComponent = productosComponent; 13 | this.productosComponent.getClass(); 14 | 15 | this.setSize(850, 600); 16 | this.setBackground(Color.YELLOW); 17 | this.setLayout(null); 18 | this.setVisible(true); 19 | } 20 | } -------------------------------------------------------------------------------- /Clase6/src/app/client/components/inicio/InicioTemplate.java: -------------------------------------------------------------------------------- 1 | package app.client.components.inicio; 2 | 3 | import java.awt.Color; 4 | 5 | import javax.swing.JPanel; 6 | 7 | public class InicioTemplate extends JPanel { 8 | private static final long serialVersionUID = 1L; 9 | 10 | // Declaración Servicios y dependencias 11 | private InicioComponent inicioComponent; 12 | 13 | public InicioTemplate(InicioComponent inicioComponent) { 14 | this.inicioComponent = inicioComponent; 15 | this.inicioComponent.getClass(); 16 | 17 | this.setSize(850, 600); 18 | this.setBackground(Color.DARK_GRAY); 19 | this.setLayout(null); 20 | this.setVisible(true); 21 | } 22 | } -------------------------------------------------------------------------------- /Clase6/src/app/client/components/configuraciones/ConfiguracionesTemplate.java: -------------------------------------------------------------------------------- 1 | package app.client.components.configuraciones; 2 | 3 | import javax.swing.JPanel; 4 | import java.awt.Color; 5 | 6 | public class ConfiguracionesTemplate extends JPanel { 7 | private static final long serialVersionUID = 1L; 8 | 9 | private ConfiguracionesComponent configuracionesComponent; 10 | 11 | public ConfiguracionesTemplate(ConfiguracionesComponent configuracionesComponent) { 12 | this.configuracionesComponent = configuracionesComponent; 13 | this.configuracionesComponent.getClass(); 14 | 15 | this.setSize(850, 600); 16 | this.setBackground(Color.ORANGE); 17 | this.setLayout(null); 18 | this.setVisible(true); 19 | } 20 | } -------------------------------------------------------------------------------- /Clase6/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | Clase6 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | 19 | 1600549667211 20 | 21 | 30 22 | 23 | org.eclipse.core.resources.regexFilterMatcher 24 | node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Clase6/src/app/client/components/navegacionUsuario/NavegacionUsuarioComponent.java: -------------------------------------------------------------------------------- 1 | package app.client.components.navegacionUsuario; 2 | 3 | import java.awt.event.ActionEvent; 4 | import java.awt.event.ActionListener; 5 | 6 | import app.client.vistaPrincipal.VistaPrincipalComponent; 7 | 8 | public class NavegacionUsuarioComponent implements ActionListener { 9 | private NavegacionUsuarioTemplate navegacionUsuarioTemplate; 10 | private VistaPrincipalComponent vistaPrincipalComponent; 11 | 12 | public NavegacionUsuarioComponent(VistaPrincipalComponent vistaPrincipalComponent) { 13 | this.vistaPrincipalComponent = vistaPrincipalComponent; 14 | this.navegacionUsuarioTemplate = new NavegacionUsuarioTemplate(this); 15 | } 16 | 17 | @Override 18 | public void actionPerformed(ActionEvent e) { 19 | this.vistaPrincipalComponent.mostrarComponente(e.getActionCommand().trim()); 20 | } 21 | 22 | public NavegacionUsuarioTemplate getNavegacionUsuarioTemplate() { 23 | return this.navegacionUsuarioTemplate; 24 | } 25 | } -------------------------------------------------------------------------------- /Clase6/src/app/client/components/barraTitulo/BarraTituloComponent.java: -------------------------------------------------------------------------------- 1 | package app.client.components.barraTitulo; 2 | 3 | import java.awt.event.ActionEvent; 4 | import java.awt.event.ActionListener; 5 | 6 | import app.client.vistaPrincipal.VistaPrincipalComponent; 7 | 8 | public class BarraTituloComponent implements ActionListener { 9 | private BarraTituloTemplate barraTituloTemplate; 10 | private VistaPrincipalComponent vistaPrincipalComponent; 11 | 12 | public BarraTituloComponent(VistaPrincipalComponent vistaPrincipalComponent) { 13 | this.vistaPrincipalComponent = vistaPrincipalComponent; 14 | this.barraTituloTemplate = new BarraTituloTemplate(this); 15 | } 16 | 17 | @Override 18 | public void actionPerformed(ActionEvent e) { 19 | if (e.getSource() == barraTituloTemplate.getBMinimizar()) 20 | vistaPrincipalComponent.minimizar(); 21 | if (e.getSource() == barraTituloTemplate.getBCerrar()) 22 | vistaPrincipalComponent.cerrar(); 23 | } 24 | 25 | public BarraTituloTemplate getBarraTituloTemplate() { 26 | return this.barraTituloTemplate; 27 | } 28 | } -------------------------------------------------------------------------------- /Clase6/src/app/client/vistaPrincipal/VistaPrincipalTemplate.java: -------------------------------------------------------------------------------- 1 | package app.client.vistaPrincipal; 2 | 3 | import javax.swing.JFrame; 4 | import javax.swing.JPanel; 5 | 6 | import app.services.ObjGraficosService; 7 | 8 | public class VistaPrincipalTemplate extends JFrame { 9 | private static final long serialVersionUID = 1L; 10 | 11 | // Declaración Servicios y Objetos 12 | private ObjGraficosService sObjGraficos; 13 | private VistaPrincipalComponent vistaPrincipalComponent; 14 | 15 | // Declaración Objetos Gráficos 16 | private JPanel pNavegacion, pBarra, pPrincipal; 17 | 18 | public VistaPrincipalTemplate(VistaPrincipalComponent vistaPrincipalComponent) { 19 | 20 | this.vistaPrincipalComponent = vistaPrincipalComponent; 21 | this.vistaPrincipalComponent.getClass(); 22 | sObjGraficos = ObjGraficosService.getService(); 23 | 24 | this.crearJPanels(); 25 | 26 | setDefaultCloseOperation(EXIT_ON_CLOSE); 27 | setSize(1100, 650); 28 | setLocationRelativeTo(this); 29 | setLayout(null); 30 | setUndecorated(true); 31 | setVisible(true); 32 | } 33 | 34 | public void crearJPanels() { 35 | pNavegacion = sObjGraficos.construirJPanel(0, 0, 250, 700, null, null); 36 | this.add(pNavegacion); 37 | 38 | pBarra = sObjGraficos.construirJPanel(250, 0, 850, 50, null, null); 39 | this.add(pBarra); 40 | 41 | pPrincipal = sObjGraficos.construirJPanel(250, 50, 850, 600, null, null); 42 | this.add(pPrincipal); 43 | } 44 | 45 | public JPanel getPNavegacion() { return this.pNavegacion; } 46 | 47 | public JPanel getPPrincipal() { return this.pPrincipal; } 48 | 49 | public JPanel getPBarra() { return this.pBarra; } 50 | } -------------------------------------------------------------------------------- /Clase6/src/app/client/login/LoginComponent.java: -------------------------------------------------------------------------------- 1 | package app.client.login; 2 | 3 | import java.awt.event.ActionEvent; 4 | import java.awt.event.ActionListener; 5 | 6 | import javax.swing.JOptionPane; 7 | 8 | import app.client.vistaPrincipal.VistaPrincipalComponent; 9 | 10 | public class LoginComponent implements ActionListener { 11 | private LoginTemplate loginTemplate; 12 | private VistaPrincipalComponent vistaPrincipal; 13 | 14 | public LoginComponent() { 15 | this.loginTemplate = new LoginTemplate(this); 16 | } 17 | 18 | @Override 19 | public void actionPerformed(ActionEvent e) { 20 | if (e.getSource() == loginTemplate.getBEntrar()) { 21 | this.mostrarDatosUsuario(); 22 | this.entrar(); 23 | } 24 | if (e.getSource() == loginTemplate.getBCerrar()) 25 | System.exit(0); 26 | if (e.getSource() == loginTemplate.getBOpcion1()) 27 | JOptionPane.showMessageDialog(null, "Boton Opcion", "Advertencia", 1); 28 | if (e.getSource() == loginTemplate.getBRegistrarse()) 29 | JOptionPane.showMessageDialog(null, "Boton Registro", "Advertencia", 1); 30 | } 31 | 32 | public void mostrarDatosUsuario() { 33 | String nombreUsuario = loginTemplate.getTNombreUsuario().getText(); 34 | String claveUsuario = new String(loginTemplate.getTClaveUsuario().getPassword()); 35 | String tipoUsuario = ((String) loginTemplate.getCbTipoUsuario().getSelectedItem()); 36 | String check = ""; 37 | if (loginTemplate.getCheckSi().isSelected()) 38 | check = "si"; 39 | if (loginTemplate.getCheckNo().isSelected()) 40 | check = "no"; 41 | JOptionPane.showMessageDialog( 42 | null, 43 | "Nombre Usuario: " + nombreUsuario + 44 | "\n Clave Usuario: " + claveUsuario + 45 | "\nTipo Usuario: " + tipoUsuario + 46 | "\n¿Notificaciones?: " + check, 47 | "Advertencia", 48 | 1 49 | ); 50 | } 51 | 52 | public void entrar() { 53 | if (vistaPrincipal == null) 54 | this.vistaPrincipal = new VistaPrincipalComponent(this); 55 | else 56 | this.vistaPrincipal.getVistaPrincipalTemplate().setVisible(true); 57 | loginTemplate.setVisible(false); 58 | } 59 | 60 | public LoginTemplate getLoginTemplate() { 61 | return this.loginTemplate; 62 | } 63 | } -------------------------------------------------------------------------------- /Clase6/src/app/services/RecursosService.java: -------------------------------------------------------------------------------- 1 | package app.services; 2 | 3 | import java.awt.Color; 4 | import java.awt.Cursor; 5 | import java.awt.Font; 6 | import java.awt.FontFormatException; 7 | import java.awt.GraphicsEnvironment; 8 | 9 | import java.io.File; 10 | import java.io.IOException; 11 | 12 | import javax.swing.border.Border; 13 | import javax.swing.BorderFactory; 14 | import javax.swing.ImageIcon; 15 | 16 | public class RecursosService { 17 | 18 | private Color colorPrincipal, colorSecundario, colorGrisOscuro; 19 | private Font fontTPrincipal, fontTitulo, fontSubtitulo; 20 | private Font fontMediana, fontLigera; 21 | private Cursor cMano; 22 | private Border bInferiorAzul; 23 | private ImageIcon iCerrar, iMinimizar; 24 | 25 | static private RecursosService servicio; 26 | 27 | private RecursosService() { 28 | generarFuentes(); 29 | 30 | this.crearColores(); 31 | this.crearFuentes(); 32 | this.crearCursores(); 33 | this.crearBordes(); 34 | this.crearImagenes(); 35 | } 36 | 37 | private void crearColores() { 38 | colorPrincipal = new Color(60, 78, 120); 39 | colorSecundario = new Color(151, 0, 158); 40 | colorGrisOscuro = new Color(80, 80, 80); 41 | } 42 | 43 | private void crearFuentes() { 44 | fontTPrincipal = new Font("Rockwell Extra Bold", Font.PLAIN, 20); 45 | fontTitulo = new Font("Calibri (Cuerpo)", Font.BOLD, 17); 46 | fontSubtitulo = new Font("Forte", Font.PLAIN, 13); 47 | fontMediana = new Font("LuzSans-Book", Font.PLAIN, 15); 48 | fontLigera = new Font("LuzSans-Book", Font.PLAIN, 12); 49 | } 50 | 51 | private void crearCursores() { cMano = new Cursor(Cursor.HAND_CURSOR); } 52 | 53 | private void crearBordes() { 54 | bInferiorAzul = BorderFactory.createMatteBorder(0, 0, 2, 0, colorPrincipal); 55 | } 56 | 57 | private void crearImagenes() { 58 | iCerrar = new ImageIcon("Clase6/resources/images/cerrar.png"); 59 | iMinimizar = new ImageIcon("Clase6/resources/images/minimizar.png"); 60 | } 61 | 62 | private void generarFuentes() { 63 | try { 64 | GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 65 | ge.registerFont( Font.createFont( 66 | Font.TRUETYPE_FONT, 67 | new File("Clase6/resources/fonts/LUZRO.ttf") 68 | )); 69 | } catch (IOException | FontFormatException e) { 70 | System.out.println(e); 71 | } 72 | } 73 | 74 | public Color getColorPrincipal() { return colorPrincipal; } 75 | 76 | public Color getColorGrisOscuro() { return colorGrisOscuro; } 77 | 78 | public Color getColorSecundario(){ return colorSecundario; } 79 | 80 | public Font getFontTPrincipal() { return fontTPrincipal; } 81 | 82 | public Font getFontTitulo() { return fontTitulo; } 83 | 84 | public Font getFontSubtitulo() { return fontSubtitulo; } 85 | 86 | public Font getFontMediana() { return fontMediana; } 87 | 88 | public Font getFontLigera(){ return fontLigera; } 89 | 90 | public Cursor getCMano() { return cMano; } 91 | 92 | public Border getBInferiorAzul() { return bInferiorAzul; } 93 | 94 | public ImageIcon getICerrar() { return iCerrar; } 95 | 96 | public ImageIcon getIMinimizar() { return iMinimizar; } 97 | 98 | public static RecursosService getService() { 99 | if (servicio == null) servicio = new RecursosService(); 100 | return servicio; 101 | } 102 | } -------------------------------------------------------------------------------- /Clase6/src/app/client/components/barraTitulo/BarraTituloTemplate.java: -------------------------------------------------------------------------------- 1 | package app.client.components.barraTitulo; 2 | 3 | import app.services.ObjGraficosService; 4 | import app.services.RecursosService; 5 | 6 | import javax.swing.ImageIcon; 7 | import javax.swing.JButton; 8 | import javax.swing.JLabel; 9 | import javax.swing.JPanel; 10 | 11 | import java.awt.Color; 12 | import java.awt.Image; 13 | import java.awt.Font; 14 | 15 | public class BarraTituloTemplate extends JPanel { 16 | private static final long serialVersionUID = 1L; 17 | 18 | // Declaración Servicios y dependencias 19 | private BarraTituloComponent barraTituloComponent; 20 | private ObjGraficosService sObjGraficos; 21 | private RecursosService sRecursos; 22 | 23 | // Declaración objetos gráficos 24 | private JLabel lLogoApp, lTituloApp; 25 | private JButton bCerrar, bMinimizar; 26 | 27 | // Declaración Objetos Decoradores 28 | private ImageIcon iLogoApp, iDimAux; 29 | private Font fontTituloBarra; 30 | 31 | public BarraTituloTemplate(BarraTituloComponent barraTituloComponent) { 32 | this.barraTituloComponent = barraTituloComponent; 33 | this.sObjGraficos = ObjGraficosService.getService(); 34 | this.sRecursos = RecursosService.getService(); 35 | 36 | this.crearObjetosDecoradores(); 37 | this.crearJLabels(); 38 | this.crearJButtons(); 39 | 40 | this.setSize(850, 50); 41 | this.setBackground(Color.WHITE); 42 | this.setLayout(null); 43 | this.setVisible(true); 44 | } 45 | 46 | public void crearObjetosDecoradores() { 47 | iLogoApp = new ImageIcon("Clase6/resources/images/logo_app.png"); 48 | fontTituloBarra = new Font("Britannic Bold", Font.PLAIN, 24); 49 | } 50 | 51 | public void crearJButtons() { 52 | iDimAux = new ImageIcon( 53 | sRecursos.getICerrar().getImage() 54 | .getScaledInstance(23, 23, Image.SCALE_AREA_AVERAGING) 55 | ); 56 | bCerrar = sObjGraficos.construirJButton( 57 | null, 58 | 800, 10, 45, 30, 59 | sRecursos.getCMano(), 60 | iDimAux, 61 | null, null, null, null, 62 | "c", 63 | false 64 | ); 65 | bCerrar.addActionListener(barraTituloComponent); 66 | this.add(bCerrar); 67 | 68 | iDimAux = new ImageIcon( 69 | sRecursos.getIMinimizar().getImage() 70 | .getScaledInstance(28, 28, Image.SCALE_AREA_AVERAGING) 71 | ); 72 | bMinimizar = sObjGraficos.construirJButton( 73 | null, 74 | 750, 10, 45, 30, 75 | sRecursos.getCMano(), 76 | iDimAux, 77 | null, null, null, null, 78 | "c", 79 | false 80 | ); 81 | bMinimizar.addActionListener(barraTituloComponent); 82 | this.add(bMinimizar); 83 | } 84 | 85 | public void crearJLabels() { 86 | iDimAux = new ImageIcon( 87 | iLogoApp.getImage() 88 | .getScaledInstance(50, 50, Image.SCALE_AREA_AVERAGING) 89 | ); 90 | lLogoApp = sObjGraficos.construirJLabel( 91 | null, 92 | 20, 0, 50, 50, 93 | null, 94 | iDimAux, 95 | null, null, null, null, 96 | "c" 97 | ); 98 | this.add(lLogoApp); 99 | 100 | lTituloApp = sObjGraficos.construirJLabel( 101 | "ProductList", 102 | 40, 5, 200, 40, 103 | null, null, 104 | fontTituloBarra, 105 | null, 106 | sRecursos.getColorPrincipal(), 107 | null, 108 | "c" 109 | ); 110 | this.add(lTituloApp); 111 | } 112 | 113 | public JButton getBCerrar() { return bCerrar; } 114 | 115 | public JButton getBMinimizar() { return bMinimizar; } 116 | } -------------------------------------------------------------------------------- /Clase6/src/app/client/vistaPrincipal/VistaPrincipalComponent.java: -------------------------------------------------------------------------------- 1 | package app.client.vistaPrincipal; 2 | 3 | import app.client.components.amigos.AmigosComponent; 4 | import app.client.components.barraTitulo.BarraTituloComponent; 5 | import app.client.components.configuraciones.ConfiguracionesComponent; 6 | import app.client.components.inicio.InicioComponent; 7 | import app.client.components.navegacionUsuario.NavegacionUsuarioComponent; 8 | import app.client.components.perfil.PerfilComponent; 9 | import app.client.components.productos.ProductosComponent; 10 | import app.client.login.LoginComponent; 11 | 12 | import java.awt.Frame; 13 | 14 | public class VistaPrincipalComponent { 15 | private VistaPrincipalTemplate vistaPrincipalTemplate; 16 | 17 | // Declaración Componentes 18 | private BarraTituloComponent barraTituloComponent; 19 | private NavegacionUsuarioComponent navegacionUsuarioComponent; 20 | private InicioComponent inicioComponent; 21 | private PerfilComponent perfilComponent; 22 | private AmigosComponent amigosComponent; 23 | private ProductosComponent productosComponent; 24 | private ConfiguracionesComponent configuracionesComponent; 25 | private LoginComponent loginComponent; 26 | 27 | public VistaPrincipalComponent(LoginComponent loginComponent) { 28 | this.loginComponent = loginComponent; 29 | this.vistaPrincipalTemplate = new VistaPrincipalTemplate(this); 30 | this.barraTituloComponent = new BarraTituloComponent(this); 31 | this.navegacionUsuarioComponent = new NavegacionUsuarioComponent(this); 32 | 33 | vistaPrincipalTemplate.getPBarra() 34 | .add(barraTituloComponent.getBarraTituloTemplate()); 35 | vistaPrincipalTemplate.getPNavegacion() 36 | .add(navegacionUsuarioComponent.getNavegacionUsuarioTemplate()); 37 | } 38 | 39 | public VistaPrincipalTemplate getVistaPrincipalTemplate() { 40 | return this.vistaPrincipalTemplate; 41 | } 42 | 43 | public void mostrarComponente(String comando) { 44 | vistaPrincipalTemplate.getPPrincipal().removeAll(); 45 | switch (comando) { 46 | case "Inicio": 47 | if (this.inicioComponent == null) 48 | this.inicioComponent = new InicioComponent(); 49 | vistaPrincipalTemplate.getPPrincipal() 50 | .add(inicioComponent.getInicioTemplate()); 51 | break; 52 | case "Perfil": 53 | if (this.perfilComponent == null) 54 | this.perfilComponent = new PerfilComponent(); 55 | vistaPrincipalTemplate.getPPrincipal() 56 | .add(perfilComponent.getPerfilTemplate()); 57 | break; 58 | case "Amigos": 59 | if (this.amigosComponent == null) 60 | this.amigosComponent = new AmigosComponent(); 61 | vistaPrincipalTemplate.getPPrincipal() 62 | .add(amigosComponent.getAmigosTemplate()); 63 | break; 64 | case "Productos": 65 | if (this.productosComponent == null) 66 | this.productosComponent = new ProductosComponent(); 67 | vistaPrincipalTemplate.getPPrincipal() 68 | .add(productosComponent.getProductosTemplate()); 69 | break; 70 | case "Configuraciones": 71 | if (this.configuracionesComponent == null) 72 | this.configuracionesComponent = new ConfiguracionesComponent(); 73 | vistaPrincipalTemplate.getPPrincipal() 74 | .add(configuracionesComponent.getConfiguracionesTemplate()); 75 | break; 76 | case "Cerrar Sesión": 77 | this.loginComponent.getLoginTemplate().setVisible(true); 78 | this.vistaPrincipalTemplate.setVisible(false); 79 | break; 80 | } 81 | vistaPrincipalTemplate.repaint(); 82 | } 83 | 84 | public void cerrar() { 85 | System.exit(0); 86 | } 87 | 88 | public void minimizar() { 89 | this.vistaPrincipalTemplate.setExtendedState(Frame.ICONIFIED); 90 | } 91 | } -------------------------------------------------------------------------------- /Clase6/src/app/client/components/navegacionUsuario/NavegacionUsuarioTemplate.java: -------------------------------------------------------------------------------- 1 | package app.client.components.navegacionUsuario; 2 | 3 | import app.services.ObjGraficosService; 4 | import app.services.RecursosService; 5 | 6 | import java.awt.Color; 7 | import java.awt.Image; 8 | 9 | import javax.swing.ImageIcon; 10 | import javax.swing.JButton; 11 | import javax.swing.JLabel; 12 | import javax.swing.JPanel; 13 | import javax.swing.border.Border; 14 | import javax.swing.border.EmptyBorder; 15 | 16 | public class NavegacionUsuarioTemplate extends JPanel { 17 | private static final long serialVersionUID = 1L; 18 | 19 | // Declaración Servicios y dependencias 20 | private NavegacionUsuarioComponent navegacionUsuarioComponent; 21 | private ObjGraficosService sObjGraficos; 22 | private RecursosService sRecursos; 23 | 24 | // Declaración objetos gráficos 25 | private JPanel pSuperior, pInferior; 26 | private JLabel lNombreUsuario, lEslogan, lImagenUsuario, lIconoUsuario; 27 | private JButton bInicio, bPerfil, bAmigos, bProductos, bConfiguracion, bCerrarSesion; 28 | 29 | // Declaración Objetos Decoradores 30 | private ImageIcon iIconoUsuario, iInicio, iPerfil, iAmigos, iProductos; 31 | private ImageIcon iConfiguracion, iCerrarSesion, iImagenUsuario, iDimAux; 32 | private Border bVacio; 33 | 34 | public NavegacionUsuarioTemplate(NavegacionUsuarioComponent navegacionUsuarioComponent) { 35 | this.navegacionUsuarioComponent = navegacionUsuarioComponent; 36 | this.sObjGraficos = ObjGraficosService.getService(); 37 | this.sRecursos = RecursosService.getService(); 38 | 39 | this.crearObjetosDecoradores(); 40 | this.crearJPanels(); 41 | this.crearJLabels(); 42 | this.crearJButtons(); 43 | 44 | this.setSize(250, 700); 45 | this.setLayout(null); 46 | this.setVisible(true); 47 | } 48 | 49 | public void crearJPanels() { 50 | this.pSuperior = sObjGraficos.construirJPanel( 51 | 0, 0, 250, 300, 52 | sRecursos.getColorPrincipal(), 53 | null 54 | ); 55 | this.add(pSuperior); 56 | 57 | this.pInferior = sObjGraficos.construirJPanel( 58 | 0, 300, 250, 400, 59 | sRecursos.getColorPrincipal(), 60 | null 61 | ); 62 | this.add(pInferior); 63 | } 64 | 65 | public void crearObjetosDecoradores() { 66 | this.iIconoUsuario = new ImageIcon("Clase6/resources/images/usuario_navegacion.png"); 67 | this.iInicio = new ImageIcon("Clase6/resources/images/inicio.png"); 68 | this.iPerfil = new ImageIcon("Clase6/resources/images/perfil.png"); 69 | this.iAmigos = new ImageIcon("Clase6/resources/images/amigos.png"); 70 | this.iProductos = new ImageIcon("Clase6/resources/images/productos.png"); 71 | this.iConfiguracion = new ImageIcon("Clase6/resources/images/configuracion.png"); 72 | this.iCerrarSesion = new ImageIcon("Clase6/resources/images/salir.png"); 73 | this.iImagenUsuario = new ImageIcon("Clase6/resources/images/perfiles/perfil1.png"); 74 | this.bVacio = new EmptyBorder(2, 20, 2, 2); 75 | } 76 | 77 | public void crearJButtons() { 78 | // BOTÓN INICIO-------------------------------------------------------------------- 79 | iDimAux = new ImageIcon( 80 | iInicio.getImage() 81 | .getScaledInstance(20, 20, Image.SCALE_AREA_AVERAGING) 82 | ); 83 | this.bInicio = sObjGraficos.construirJButton( 84 | " Inicio", 85 | 30, 30, 200, 40, 86 | sRecursos.getCMano(), 87 | iDimAux, 88 | sRecursos.getFontMediana(), 89 | null, 90 | Color.WHITE, 91 | bVacio, 92 | "l", 93 | false 94 | ); 95 | this.bInicio.addActionListener(navegacionUsuarioComponent); 96 | this.pInferior.add(bInicio); 97 | 98 | // BOTÓN PERFIL-------------------------------------------------------------------- 99 | iDimAux = new ImageIcon( 100 | iPerfil.getImage() 101 | .getScaledInstance(20, 20, Image.SCALE_AREA_AVERAGING) 102 | ); 103 | this.bPerfil = sObjGraficos.construirJButton( 104 | " Perfil", 105 | 30, 80, 200, 40, 106 | sRecursos.getCMano(), 107 | iDimAux, 108 | sRecursos.getFontMediana(), 109 | null, 110 | Color.WHITE, 111 | bVacio, 112 | "l", 113 | false 114 | ); 115 | this.bPerfil.addActionListener(navegacionUsuarioComponent); 116 | this.pInferior.add(bPerfil); 117 | 118 | // BOTÓN AMIGOS-------------------------------------------------------------------- 119 | iDimAux = new ImageIcon( 120 | iAmigos.getImage() 121 | .getScaledInstance(20, 20, Image.SCALE_AREA_AVERAGING) 122 | ); 123 | this.bAmigos = sObjGraficos.construirJButton( 124 | " Amigos", 125 | 30, 130, 200, 40, 126 | sRecursos.getCMano(), 127 | iDimAux, 128 | sRecursos.getFontMediana(), 129 | null, 130 | Color.WHITE, 131 | bVacio, 132 | "l", 133 | false 134 | ); 135 | this.bAmigos.addActionListener(navegacionUsuarioComponent); 136 | this.pInferior.add(bAmigos); 137 | 138 | // BOTÓN PRODUCTOS-------------------------------------------------------------------- 139 | iDimAux = new ImageIcon( 140 | iProductos.getImage() 141 | .getScaledInstance(20, 20, Image.SCALE_AREA_AVERAGING) 142 | ); 143 | this.bProductos = sObjGraficos.construirJButton( 144 | " Productos", 145 | 30, 180, 200, 40, 146 | sRecursos.getCMano(), 147 | iDimAux, 148 | sRecursos.getFontMediana(), 149 | null, 150 | Color.WHITE, 151 | bVacio, 152 | "l", 153 | false 154 | ); 155 | this.bProductos.addActionListener(navegacionUsuarioComponent); 156 | this.pInferior.add(bProductos); 157 | 158 | // BOTÓN CONFIGURACIÓN-------------------------------------------------------------------- 159 | iDimAux = new ImageIcon( 160 | iConfiguracion.getImage() 161 | .getScaledInstance(20, 20, Image.SCALE_AREA_AVERAGING) 162 | ); 163 | this.bConfiguracion = sObjGraficos.construirJButton( 164 | " Configuraciones", 165 | 30, 230, 200, 40, 166 | sRecursos.getCMano(), 167 | iDimAux, 168 | sRecursos.getFontMediana(), 169 | null, 170 | Color.WHITE, 171 | bVacio, 172 | "l", 173 | false 174 | ); 175 | this.bConfiguracion.addActionListener(navegacionUsuarioComponent); 176 | this.pInferior.add(bConfiguracion); 177 | 178 | // BOTÓN CERRAR SESIÓN-------------------------------------------------------------------- 179 | iDimAux = new ImageIcon( 180 | iCerrarSesion.getImage() 181 | .getScaledInstance(20, 20, Image.SCALE_AREA_AVERAGING) 182 | ); 183 | this.bCerrarSesion = sObjGraficos.construirJButton( 184 | " Cerrar Sesión", 185 | 30, 280, 200, 40, 186 | sRecursos.getCMano(), 187 | iDimAux, 188 | sRecursos.getFontMediana(), 189 | null, 190 | Color.WHITE, 191 | bVacio, 192 | "l", 193 | false 194 | ); 195 | this.bCerrarSesion.addActionListener(navegacionUsuarioComponent); 196 | this.pInferior.add(bCerrarSesion); 197 | } 198 | 199 | public void crearJLabels() { 200 | // LABEL ICONO USUARIO-------------------------------------------------------------------- 201 | iDimAux = new ImageIcon( 202 | iIconoUsuario.getImage() 203 | .getScaledInstance(40, 40, Image.SCALE_AREA_AVERAGING) 204 | ); 205 | this.lIconoUsuario = sObjGraficos.construirJLabel( 206 | null, 207 | 10, 20, 40, 40, 208 | null, 209 | iDimAux, 210 | null, null, null, null, 211 | "c" 212 | ); 213 | this.pSuperior.add(lIconoUsuario); 214 | 215 | // LABEL NOMBRE USUARIO-------------------------------------------------------------------- 216 | this.lNombreUsuario = sObjGraficos.construirJLabel( 217 | "Nombre de Usuario", 218 | ((this.pSuperior.getWidth() - 200) / 2) + 10, 20, 200, 40, 219 | null, null, 220 | sRecursos.getFontTitulo(), 221 | null, 222 | Color.WHITE, 223 | null, 224 | "c" 225 | ); 226 | this.pSuperior.add(lNombreUsuario); 227 | 228 | // LABEL IMAGEN USUARIO-------------------------------------------------------------------- 229 | iDimAux = new ImageIcon( 230 | iImagenUsuario.getImage() 231 | .getScaledInstance(180, 180, Image.SCALE_AREA_AVERAGING) 232 | ); 233 | this.lImagenUsuario = sObjGraficos.construirJLabel( 234 | null, 235 | (this.pSuperior.getWidth() - 180) / 2, 75, 180, 180, 236 | null, 237 | iDimAux, 238 | null, null, null, null, 239 | "c" 240 | ); 241 | this.pSuperior.add(lImagenUsuario); 242 | 243 | // LABEL ESLOGAN-------------------------------------------------------------------- 244 | this.lEslogan = sObjGraficos.construirJLabel( 245 | "
Nuestros clientes son
lo mas importante
", 246 | (this.pSuperior.getWidth() - 180) / 2, 265, 180, 40, 247 | null, null, 248 | sRecursos.getFontLigera(), 249 | null, 250 | Color.WHITE, 251 | null, 252 | "c"); 253 | this.pSuperior.add(lEslogan); 254 | } 255 | } -------------------------------------------------------------------------------- /Clase6/src/app/client/login/LoginTemplate.java: -------------------------------------------------------------------------------- 1 | package app.client.login; 2 | 3 | import app.services.ObjGraficosService; 4 | import app.services.RecursosService; 5 | 6 | import java.awt.Color; 7 | import java.awt.Image; 8 | 9 | import javax.swing.ImageIcon; 10 | import javax.swing.JPanel; 11 | import javax.swing.JPasswordField; 12 | import javax.swing.JTextField; 13 | import javax.swing.ButtonGroup; 14 | import javax.swing.JButton; 15 | import javax.swing.JCheckBox; 16 | import javax.swing.JComboBox; 17 | import javax.swing.JFrame; 18 | import javax.swing.JLabel; 19 | 20 | public class LoginTemplate extends JFrame { 21 | private static final long serialVersionUID = 1L; 22 | 23 | // Declaración Objetos Gráficos 24 | private JPanel pDerecha, pIzquierda; 25 | private JLabel lTituloApp, lEslogan, lTituloLogin, lNotificaciones; 26 | private JLabel lFondo, lSvg1, lLogo, lUsuario, lClave, lFacebook, lTwitter, lYoutube; 27 | private JTextField tNombreUsuario; 28 | private JPasswordField tClaveUsuario; 29 | private JComboBox cbTipoUsuario; 30 | private JButton bEntrar, bCerrar, bRegistrarse, bOpcion1, bOpcion2, bOpcion3; 31 | private JCheckBox checkSi, checkNo; 32 | private ButtonGroup grupo; 33 | 34 | // Declaración objetos Decoradores 35 | private ImageIcon iFondo, iLogo; 36 | private ImageIcon iSvg1, iUsuario2, iClave2, iPunto1, iFacebook1, iTwitter1, iYoutube1, iDimAux; 37 | 38 | // Declaración servicios 39 | private ObjGraficosService sObjGraficos; 40 | private RecursosService sRecursos; 41 | private LoginComponent loginComponent; 42 | 43 | public LoginTemplate(LoginComponent loginComponent){ 44 | this.loginComponent = loginComponent; 45 | sObjGraficos = ObjGraficosService.getService(); 46 | sRecursos = RecursosService.getService(); 47 | 48 | this.crearObjetosDecoradores(); 49 | this.crearJPanels(); 50 | this.crearJTextFields(); 51 | this.crearJPasswordFields(); 52 | this.crearJComboBoxes(); 53 | this.crearJButtons(); 54 | this.crearJCheckBoxes(); 55 | this.crearJLabels(); 56 | 57 | setLayout(null); 58 | setDefaultCloseOperation(EXIT_ON_CLOSE); 59 | setSize(1000, 500); 60 | setLocationRelativeTo(this); 61 | setUndecorated(true); 62 | setLayout(null); 63 | setVisible(true); 64 | } 65 | 66 | public void crearObjetosDecoradores() { 67 | iFondo = new ImageIcon("Clase6/resources/images/fondo.png"); 68 | iLogo = new ImageIcon("Clase6/resources/images/logo.png"); 69 | iUsuario2 = new ImageIcon("Clase6/resources/images/usuario2.png"); 70 | iClave2 = new ImageIcon("Clase6/resources/images/clave2.png"); 71 | iPunto1 = new ImageIcon("Clase6/resources/images/punto1.png"); 72 | iFacebook1 = new ImageIcon("Clase6/resources/images/facebook1.png"); 73 | iTwitter1 = new ImageIcon("Clase6/resources/images/twitter1.png"); 74 | iYoutube1 = new ImageIcon("Clase6/resources/images/youtube1.png"); 75 | iSvg1 = new ImageIcon("Clase6/resources/images/imagen1.png"); 76 | } 77 | 78 | public void crearJPanels() { 79 | pIzquierda = sObjGraficos.construirJPanel(0, 0, 600, 500, Color.WHITE, null); 80 | this.add(pIzquierda); 81 | 82 | pDerecha = sObjGraficos.construirJPanel(600, 0, 400, 500, Color.WHITE, null); 83 | this.add(pDerecha); 84 | } 85 | 86 | public void crearJTextFields() { 87 | tNombreUsuario = sObjGraficos.construirJTextField( 88 | "Nombre Usuario", 89 | (pDerecha.getWidth() - 260) / 2, 130, 260, 40, 90 | null, 91 | Color.WHITE, 92 | sRecursos.getColorPrincipal(), 93 | sRecursos.getColorGrisOscuro(), 94 | sRecursos.getBInferiorAzul(), 95 | "c" 96 | ); 97 | pDerecha.add(tNombreUsuario); 98 | } 99 | 100 | public void crearJButtons() { 101 | // BOTÓN ENTRAR----------------------------------------------------------------------------- 102 | bEntrar = sObjGraficos.construirJButton( 103 | "Entrar", 104 | (pDerecha.getWidth() - 250) / 2, 330, 250, 45, 105 | sRecursos.getCMano(), 106 | null, null, 107 | sRecursos.getColorPrincipal(), 108 | Color.WHITE, 109 | null, 110 | "c", 111 | true 112 | ); 113 | bEntrar.addActionListener(loginComponent); 114 | pDerecha.add(bEntrar); 115 | 116 | // BOTÓN REGISTRARSE----------------------------------------------------------------------- 117 | bRegistrarse = sObjGraficos.construirJButton( 118 | "Registrarse", 119 | 240, 460, 145, 35, 120 | sRecursos.getCMano(), 121 | null, null, 122 | sRecursos.getColorPrincipal(), 123 | Color.WHITE, 124 | null, 125 | "c", 126 | true 127 | ); 128 | bRegistrarse.addActionListener(loginComponent); 129 | pDerecha.add(bRegistrarse); 130 | 131 | // BOTÓN CERRAR----------------------------------------------------------------------------- 132 | iDimAux = new ImageIcon( 133 | sRecursos.getICerrar().getImage() 134 | .getScaledInstance(30, 30, Image.SCALE_AREA_AVERAGING) 135 | ); 136 | bCerrar = sObjGraficos.construirJButton( 137 | null, 138 | 350, 10, 45, 30, 139 | sRecursos.getCMano(), 140 | iDimAux, 141 | null, null, null, null, 142 | "c", 143 | false 144 | ); 145 | bCerrar.addActionListener(loginComponent); 146 | pDerecha.add(bCerrar); 147 | 148 | iDimAux = new ImageIcon( 149 | iPunto1.getImage() 150 | .getScaledInstance(20, 20, Image.SCALE_AREA_AVERAGING) 151 | ); 152 | 153 | // BOTÓN OPCIÓN 1----------------------------------------------------------------------------- 154 | bOpcion1 = sObjGraficos.construirJButton( 155 | null, 156 | 10, 220, 30, 20, 157 | sRecursos.getCMano(), 158 | iDimAux, 159 | null, null, null, null, 160 | "c", 161 | false 162 | ); 163 | bOpcion1.addActionListener(loginComponent); 164 | pIzquierda.add(bOpcion1); 165 | 166 | // BOTÓN OPCIÓN 2----------------------------------------------------------------------------- 167 | bOpcion2 = sObjGraficos.construirJButton( 168 | null, 169 | 10, 250, 30, 20, 170 | sRecursos.getCMano(), 171 | iDimAux, 172 | null, null, null, null, 173 | "c", 174 | false 175 | ); 176 | pIzquierda.add(bOpcion2); 177 | 178 | // BOTÓN OPCIÓN 3----------------------------------------------------------------------------- 179 | bOpcion3 = sObjGraficos.construirJButton( 180 | null, 181 | 10, 280, 30, 20, 182 | sRecursos.getCMano(), 183 | iDimAux, 184 | null, null, null, null, 185 | "c", 186 | false 187 | ); 188 | pIzquierda.add(bOpcion3); 189 | } 190 | 191 | public void crearJLabels() { 192 | // LABEL LOGO----------------------------------------------------------------------------- 193 | iDimAux = new ImageIcon( 194 | iLogo.getImage() 195 | .getScaledInstance(40, 40, Image.SCALE_AREA_AVERAGING) 196 | ); 197 | lLogo = sObjGraficos.construirJLabel( 198 | null, 199 | 50, 20, 40, 40, 200 | sRecursos.getCMano(), 201 | iDimAux, 202 | null, null, null, null, 203 | "c" 204 | ); 205 | pIzquierda.add(lLogo); 206 | 207 | // LABEL TITULO APP----------------------------------------------------------------------------- 208 | lTituloApp = sObjGraficos.construirJLabel( 209 | "Login de Usuario", 210 | 100, 20, 220, 30, 211 | null, null, 212 | sRecursos.getFontTPrincipal(), 213 | null, 214 | Color.WHITE, 215 | null, 216 | "c" 217 | ); 218 | pIzquierda.add(lTituloApp); 219 | 220 | // LABEL SVG----------------------------------------------------------------------------- 221 | iDimAux = new ImageIcon( 222 | iSvg1.getImage() 223 | .getScaledInstance(500, 345, Image.SCALE_AREA_AVERAGING) 224 | ); 225 | lSvg1 = sObjGraficos.construirJLabel( 226 | null, 227 | 100, 100, 500, 345, 228 | null, 229 | iDimAux, 230 | null, null, null, null, 231 | "c" 232 | ); 233 | pIzquierda.add(lSvg1); 234 | 235 | // LABEL ESLOGAN----------------------------------------------------------------------------- 236 | lEslogan = sObjGraficos.construirJLabel( 237 | "Te ayudamos en todo", 238 | (pDerecha.getWidth() - 130) / 2, 60, 130, 20, 239 | null, null, 240 | sRecursos.getFontSubtitulo(), 241 | null, 242 | sRecursos.getColorGrisOscuro(), 243 | null, 244 | "c" 245 | ); 246 | pDerecha.add(lEslogan); 247 | 248 | // LABEL TITULO LOGIN----------------------------------------------------------------------------- 249 | lTituloLogin = sObjGraficos.construirJLabel( 250 | "Registra tus Datos", 251 | (pDerecha.getWidth() - 150) / 2, 80, 150, 30, 252 | null, null, 253 | sRecursos.getFontTitulo(), 254 | null, 255 | sRecursos.getColorGrisOscuro(), 256 | null, 257 | "c" 258 | ); 259 | pDerecha.add(lTituloLogin); 260 | 261 | // LABEL NOTIFICACIONES----------------------------------------------------------------------------- 262 | lNotificaciones = sObjGraficos.construirJLabel( 263 | "¿Recibir Notificaciones?", 264 | (pDerecha.getWidth() - 140) / 2, 400, 140, 20, 265 | null, null, 266 | sRecursos.getFontSubtitulo(), 267 | null, 268 | sRecursos.getColorGrisOscuro(), 269 | null, 270 | "c" 271 | ); 272 | pDerecha.add(lNotificaciones); 273 | 274 | // LABEL USUARIO----------------------------------------------------------------------------- 275 | iDimAux = new ImageIcon( 276 | iUsuario2.getImage() 277 | .getScaledInstance(30, 30, Image.SCALE_AREA_AVERAGING) 278 | ); 279 | lUsuario = sObjGraficos.construirJLabel( 280 | null, 281 | 40, 140, 30, 30, 282 | null, 283 | iDimAux, 284 | null, null, null, null, 285 | "c" 286 | ); 287 | pDerecha.add(lUsuario); 288 | 289 | // LABEL CLAVE----------------------------------------------------------------------------- 290 | iDimAux = new ImageIcon( 291 | iClave2.getImage() 292 | .getScaledInstance(30, 30, Image.SCALE_AREA_AVERAGING) 293 | ); 294 | lClave = sObjGraficos.construirJLabel( 295 | null, 296 | 40, 270, 30, 30, 297 | null, 298 | iDimAux, 299 | null, null, null, null, 300 | "c" 301 | ); 302 | pDerecha.add(lClave); 303 | 304 | // LABEL FACEBOOK----------------------------------------------------------------------------- 305 | iDimAux = new ImageIcon( 306 | iFacebook1.getImage() 307 | .getScaledInstance(30, 30, Image.SCALE_AREA_AVERAGING) 308 | ); 309 | lFacebook = sObjGraficos.construirJLabel( 310 | null, 311 | 20, 460, 30, 30, 312 | sRecursos.getCMano(), 313 | iDimAux, 314 | null, null, null, null, 315 | "c" 316 | ); 317 | pIzquierda.add(lFacebook); 318 | 319 | // LABEL TWITTER----------------------------------------------------------------------------- 320 | iDimAux = new ImageIcon( 321 | iTwitter1.getImage() 322 | .getScaledInstance(30, 30, Image.SCALE_AREA_AVERAGING) 323 | ); 324 | lTwitter = sObjGraficos.construirJLabel( 325 | null, 326 | 60, 460, 30, 30, 327 | sRecursos.getCMano(), 328 | iDimAux, 329 | null, null, null, null, 330 | "c" 331 | ); 332 | pIzquierda.add(lTwitter); 333 | 334 | // LABEL YOUTUBE----------------------------------------------------------------------------- 335 | iDimAux = new ImageIcon( 336 | iYoutube1.getImage() 337 | .getScaledInstance(30, 30, Image.SCALE_AREA_AVERAGING) 338 | ); 339 | lYoutube = sObjGraficos.construirJLabel( 340 | null, 341 | 100, 460, 30, 30, 342 | sRecursos.getCMano(), 343 | iDimAux, 344 | null, null, null, null, 345 | "c" 346 | ); 347 | pIzquierda.add(lYoutube); 348 | 349 | // LABEL FONDO----------------------------------------------------------------------------- 350 | iDimAux = new ImageIcon( 351 | iFondo.getImage() 352 | .getScaledInstance(600, 600, Image.SCALE_AREA_AVERAGING) 353 | ); 354 | lFondo = sObjGraficos.construirJLabel( 355 | null, 356 | 0, 0, 600, 600, 357 | null, 358 | iDimAux, 359 | null, null, null, null, 360 | "c" 361 | ); 362 | pIzquierda.add(lFondo); 363 | } 364 | 365 | public void crearJPasswordFields() { 366 | tClaveUsuario = sObjGraficos.construirJPasswordField( 367 | "Clave Usuario", 368 | (pDerecha.getWidth() - 260) / 2, 260, 260, 40, 369 | null, null, 370 | sRecursos.getColorPrincipal(), 371 | sRecursos.getColorGrisOscuro(), 372 | sRecursos.getBInferiorAzul(), 373 | "c" 374 | ); 375 | pDerecha.add(tClaveUsuario); 376 | } 377 | 378 | public void crearJComboBoxes() { 379 | cbTipoUsuario = sObjGraficos.construirJComboBox( 380 | "Cliente_Cajero_Administrador", 381 | (pDerecha.getWidth() - 220) / 2, 210, 220, 30, 382 | null, 383 | Color.WHITE, 384 | sRecursos.getColorPrincipal(), 385 | "c" 386 | ); 387 | pDerecha.add(cbTipoUsuario); 388 | } 389 | 390 | public void crearJCheckBoxes() { 391 | checkSi = sObjGraficos.construirJCheckBox( 392 | "Si", 393 | (pDerecha.getWidth() - 45) / 2 - 15, 375, 45, 25, 394 | sRecursos.getCMano(), 395 | null, null 396 | ); 397 | pDerecha.add(checkSi); 398 | 399 | checkNo = sObjGraficos.construirJCheckBox( 400 | "No", 401 | (pDerecha.getWidth() + 45) / 2 - 15, 375, 45, 25, 402 | sRecursos.getCMano(), 403 | null, null 404 | ); 405 | pDerecha.add(checkNo); 406 | 407 | grupo = new ButtonGroup(); 408 | grupo.add(checkSi); 409 | grupo.add(checkNo); 410 | } 411 | 412 | public JButton getBCerrar() { return this.bCerrar; } 413 | 414 | public JButton getBEntrar() { return this.bEntrar; } 415 | 416 | public JButton getBRegistrarse() { return this.bRegistrarse; } 417 | 418 | public JButton getBOpcion1() { return this.bOpcion1; } 419 | 420 | public JTextField getTNombreUsuario() { return this.tNombreUsuario; } 421 | 422 | public JPasswordField getTClaveUsuario() { return this.tClaveUsuario; } 423 | 424 | public JComboBox getCbTipoUsuario() { return this.cbTipoUsuario; } 425 | 426 | public JCheckBox getCheckSi() { return this.checkSi; } 427 | 428 | public JCheckBox getCheckNo() { return this.checkNo; } 429 | } -------------------------------------------------------------------------------- /Clase6/src/app/services/ObjGraficosService.java: -------------------------------------------------------------------------------- 1 | package app.services; 2 | 3 | import java.awt.Color; 4 | import java.awt.Component; 5 | import java.awt.Cursor; 6 | import java.awt.Font; 7 | 8 | import javax.swing.ImageIcon; 9 | import javax.swing.JButton; 10 | import javax.swing.JCheckBox; 11 | import javax.swing.JComboBox; 12 | import javax.swing.JLabel; 13 | import javax.swing.JPanel; 14 | import javax.swing.JPasswordField; 15 | import javax.swing.JRadioButton; 16 | import javax.swing.JScrollPane; 17 | import javax.swing.JTextArea; 18 | import javax.swing.JTextField; 19 | import javax.swing.SwingConstants; 20 | import javax.swing.border.Border; 21 | 22 | /** @author Cristian Felipe Patiño Cáceres Github: CrissUD*/ 23 | 24 | public class ObjGraficosService { 25 | private JPanel panel; 26 | private JScrollPane panelScroll; 27 | private JButton button; 28 | private JRadioButton radioButton; 29 | private JCheckBox check; 30 | private JLabel label; 31 | private JTextField textField; 32 | private JPasswordField passwordField; 33 | private JTextArea textArea; 34 | private JComboBox comboBox; 35 | 36 | private static ObjGraficosService servicio; 37 | 38 | private ObjGraficosService() {} 39 | 40 | /** 41 | * Descripción: Esta función se encarga de construir un objeto gráfico tipo JPanel. 42 | * @param x (int): Posición inicial en pixeles sobre el eje X. 43 | * @param y (int): Posición inicial en pixeles sobre el eje Y. 44 | * @param ancho (int): Tamaño sobre el eje X en pixeles del panel. 45 | * @param alto (int): Tamaño sobre el eje Y en pixeles del panel. 46 | * @param colorFondo (Color): Color de fondo o Background del panel. 47 | * @param borde (Border): Borde del panel. 48 | * @return panel (JPanel): Objeto gráfico tipo JPanel. 49 | * @throws null : Si construye un JPanel sin color de fondo o borde envíe un [null] como parámetro. 50 | */ 51 | public JPanel construirJPanel( 52 | int x, int y, int ancho, int alto, Color colorFondo, Border borde 53 | ) { 54 | panel = new JPanel(); 55 | panel.setLocation(x, y); 56 | panel.setSize(ancho, alto); 57 | panel.setLayout(null); 58 | panel.setBackground(colorFondo); 59 | panel.setBorder(borde); 60 | return panel; 61 | } 62 | 63 | /** 64 | * Descripción: Esta función se encarga de construir un objeto gráfico tipo JScrollPane. 65 | * @param componente (Component): Objeto gráfico que contiene el JScrollPane. 66 | * @param x (int): Posición inicial en pixeles sobre el eje X. 67 | * @param y (int): Posición inicial en pixeles sobre el eje Y. 68 | * @param ancho (int): Tamaño sobre el eje X en pixeles del JScrollPane. 69 | * @param alto (int): Tamaño sobre el eje Y en pixeles del JScrollPane. 70 | * @param colorFondo (Color): Color de fondo o Background del JScrollPane. 71 | * @param borde (Border): Borde del JScrollPane. 72 | * @return panelScroll (JPaneScroll): Objeto gráfico tipo JPaneScroll. 73 | * @throws null : Si construye un JScrollPane sin color de fondo o borde envíe un [null] como parámetro. 74 | */ 75 | public JScrollPane construirPanelBarra( 76 | Component componente, int x, int y, int ancho, int alto, Color colorFondo, Border borde 77 | ) { 78 | panelScroll = new JScrollPane(componente); 79 | panelScroll.setLocation(x, y); 80 | panelScroll.setSize(ancho, alto); 81 | panelScroll.getViewport().setBackground(colorFondo); 82 | panelScroll.setBorder(borde); 83 | return panelScroll; 84 | } 85 | 86 | /** 87 | * Descripción: Esta función se encarga de construir un objeto gráfico tipo JButton. 88 | * @param texto (String): Texto que contiene el botón. 89 | * @param x (int): Posición inicial en pixeles sobre el eje X. 90 | * @param y (int): Posición inicial en pixeles sobre el eje Y. 91 | * @param ancho (int): Tamaño sobre el eje X en pixeles del botón. 92 | * @param alto (int): Tamaño sobre el eje Y en pixeles del botón. 93 | * @param cursor (Cursor): Tipo de cursor que se muestra al pasar sobre el botón. 94 | * @param imagen (ImageIcon): Imágen que contiene el Botón. 95 | * @param fuente (Font): Tipo de fuente que tendrá el texto del botón. 96 | * @param colorFondo (Color): Color de fondo o Background del botón. 97 | * @param colorFuente (Color): Color de la letra o ForeGround del botón. 98 | * @param borde (Border): Borde del botón. 99 | * @param direccion (String): Dirección de los elementos dentro del botón siendo: 100 | *
    101 | *
  • 'c' (CENTER): Contenido centrado (por defecto).
  • 102 | *
  • 't' (TOP): Contenido centrado con texto arriba de una imágen.
  • 103 | *
  • 'l' (LEFT): Contenido en la izquierda [Si tiene imágen y texto la imágen se posiciona primero].
  • 104 | *
  • 'r' (RIGHT): Contenido en la derecha [Si tiene imágen y texto el texto se posiciona primero].
  • 105 | *
  • 'b' (BOTTOM): Contenido centrado con texto abajo de una imágen.
  • 106 | *
107 | * @param esSolido (boolean): Booleano que indica si el boton tiene color de fondo (true) o tiene fondo transparente (false). 108 | * @return boton (JButton): Objeto gráfico tipo JButton. 109 | * @throws null : Si construye un JButton sin texto, cursor, imagen, fuente, colorFondo, colorFuente o borde envíe un [null] como parámetro. 110 | */ 111 | public JButton construirJButton( 112 | String texto, int x, int y, int ancho, int alto, Cursor cursor, ImageIcon imagen, Font fuente, 113 | Color colorFondo, Color colorFuente, Border borde, String direccion, boolean esSolido 114 | ) { 115 | button = new JButton(texto); 116 | button.setLocation(x, y); 117 | button.setSize(ancho, alto); 118 | button.setFocusable(false); 119 | button.setCursor(cursor); 120 | button.setFont(fuente); 121 | button.setBackground(colorFondo); 122 | button.setForeground(colorFuente); 123 | button.setIcon(imagen); 124 | button.setBorder(borde); 125 | button.setContentAreaFilled(esSolido); 126 | switch (direccion) { 127 | case "l": 128 | button.setHorizontalAlignment(SwingConstants.LEFT); 129 | break; 130 | case "r": 131 | button.setHorizontalAlignment(SwingConstants.RIGHT); 132 | button.setHorizontalTextPosition(SwingConstants.LEFT); 133 | break; 134 | case "t": 135 | button.setVerticalTextPosition(SwingConstants.TOP); 136 | button.setHorizontalTextPosition(SwingConstants.CENTER); 137 | break; 138 | case "b": 139 | button.setVerticalTextPosition(SwingConstants.BOTTOM); 140 | button.setHorizontalTextPosition(SwingConstants.CENTER); 141 | break; 142 | default: 143 | break; 144 | } 145 | return button; 146 | } 147 | 148 | /** 149 | * Descripción: Esta función se encarga de construir un objeto gráfico tipo JRaddioButton. 150 | * @param texto (String): Texto que contiene el radioButton. 151 | * @param x (int): Posición inicial en pixeles sobre el eje X. 152 | * @param y (int): Posición inicial en pixeles sobre el eje Y. 153 | * @param ancho (int): Tamaño sobre el eje X en pixeles del radioButton. 154 | * @param alto (int): Tamaño sobre el eje Y en pixeles del radioButton. 155 | * @param cursor (Cursor): Tipo de cursor que se muestra al pasar sobre el radioButton. 156 | * @param fuente (Font): Tipo de fuente que tendrá el texto del radioButton. 157 | * @param colorFuente (Color): Color de la letra o ForeGround del radioButton. 158 | * @return radioButton (JButton): Objeto gráfico tipo JRadioButton. 159 | * @throws null : Si construye un JRadioButton sin texto, cursor, fuente, o colorFuente envíe un [null] como parámetro. 160 | */ 161 | public JRadioButton construirJRadioButton( 162 | String texto, int x, int y, int ancho, int alto, Cursor cursor, Font fuente, Color colorFuente 163 | ) { 164 | radioButton = new JRadioButton(texto); 165 | radioButton.setLocation(x, y); 166 | radioButton.setSize(ancho, alto); 167 | radioButton.setFocusable(false); 168 | radioButton.setBackground(null); 169 | radioButton.setCursor(cursor); 170 | radioButton.setFont(fuente); 171 | radioButton.setForeground(colorFuente); 172 | return radioButton; 173 | } 174 | 175 | /** 176 | * Descripción: Esta función se encarga de construir un objeto gráfico tipo JCheckBox. 177 | * @param texto (String): Texto que contiene el checkBox. 178 | * @param x (int): Posición inicial en pixeles sobre el eje X. 179 | * @param y (int): Posición inicial en pixeles sobre el eje Y. 180 | * @param ancho (int): Tamaño sobre el eje X en pixeles del checkBox. 181 | * @param alto (int): Tamaño sobre el eje Y en pixeles del checkBox. 182 | * @param cursor (Cursor): Tipo de cursor que se muestra al pasar sobre el checkBox. 183 | * @param fuente (Font): Tipo de fuente que tendrá el texto del checkBox. 184 | * @param colorFuente (Color): Color de la letra o ForeGround del checkBox. 185 | * @return check (JCheckBox): Objeto gráfico tipo JCheckBox. 186 | * @throws null : Si construye un JCheckBox sin texto, cursor, fuente, o colorFuente envíe un [null] como parámetro. 187 | */ 188 | public JCheckBox construirJCheckBox( 189 | String texto, int x, int y, int ancho, int alto, Cursor cursor, Font fuente, Color colorFuente 190 | ) { 191 | check = new JCheckBox(texto); 192 | check.setLocation(x, y); 193 | check.setSize(ancho, alto); 194 | check.setFocusable(false); 195 | check.setBackground(null); 196 | check.setCursor(cursor); 197 | check.setFont(fuente); 198 | check.setForeground(colorFuente); 199 | return check; 200 | } 201 | 202 | /** 203 | * Descripción: Esta función se encarga de construir un objeto gráfico tipo JLabel. 204 | * @param texto (String): Texto que contiene el label. 205 | * @param x (int): Posición inicial en pixeles sobre el eje X. 206 | * @param y (int): Posición inicial en pixeles sobre el eje Y. 207 | * @param ancho (int): Tamaño sobre el eje X en pixeles del label. 208 | * @param alto (int): Tamaño sobre el eje Y en pixeles del label. 209 | * @param cursor (Cursor): Tipo de cursor que se muestra al pasar sobre el label. 210 | * @param imagen (ImageIcon): Imagen que contiene el label. 211 | * @param fuente (Font): Tipo de fuente que tendrá el texto del label. 212 | * @param colorFondo (Color): Color de fondo o Background del label. 213 | * @param colorFuente (Color): Color de la letra o ForeGround del label. 214 | * @param borde (Border): Borde del label. 215 | * @param direccion (String): Dirección de los elementos dentro del label siendo: 216 | *
    217 | *
  • 'l' (LEFT): Contenido en la izquierda (por defecto).
  • 218 | *
  • 'c' (CENTER): Contenido centrado [Si tiene imágen y texto la imágen se posiciona primero].
  • 219 | *
  • 't' (TOP): Contenido centrado con texto arriba de una imágen.
  • 220 | *
  • 'r' (RIGHT): Contenido en la derecha [Si tiene imágen y texto el texto se posiciona primero].
  • 221 | *
  • 'b' (BOTTOM): Contenido centrado con texto abajo de una imágen.
  • 222 | *
223 | * @return label (JLabel): Objeto gráfico tipo JLabel. 224 | * @throws null : Si construye un JLabel sin texto, cursor, imagen, fuente, colorFondo, colorFuente o borde envíe un [null] como parámetro. 225 | */ 226 | public JLabel construirJLabel( 227 | String texto, int x, int y, int ancho, int alto, Cursor cursor, ImageIcon imagen, 228 | Font fuente, Color colorFondo, Color colorFuente, Border borde, String direccion 229 | ) { 230 | label = new JLabel(texto); 231 | label.setLocation(x, y); 232 | label.setSize(ancho, alto); 233 | label.setForeground(colorFuente); 234 | label.setFont(fuente); 235 | label.setCursor(cursor); 236 | label.setIcon(imagen); 237 | label.setBorder(borde); 238 | if (colorFondo != null) { 239 | label.setOpaque(true); 240 | label.setBackground(colorFondo); 241 | } 242 | switch (direccion) { 243 | case "c": 244 | label.setHorizontalAlignment(SwingConstants.CENTER); 245 | break; 246 | case "r": 247 | label.setHorizontalAlignment(SwingConstants.RIGHT); 248 | label.setHorizontalTextPosition(SwingConstants.LEFT); 249 | break; 250 | case "t": 251 | label.setHorizontalAlignment(SwingConstants.CENTER); 252 | label.setVerticalTextPosition(SwingConstants.TOP); 253 | label.setHorizontalTextPosition(SwingConstants.CENTER); 254 | break; 255 | case "b": 256 | label.setHorizontalAlignment(SwingConstants.CENTER); 257 | label.setVerticalTextPosition(SwingConstants.BOTTOM); 258 | label.setHorizontalTextPosition(SwingConstants.CENTER); 259 | break; 260 | default: 261 | break; 262 | } 263 | return label; 264 | } 265 | 266 | /** 267 | * Descripción: Esta función se encarga de construir un objeto gráfico tipo JTextField. 268 | * @param texto (String): Texto que contiene el textField. 269 | * @param x (int): Posición inicial en pixeles sobre el eje X. 270 | * @param y (int): Posición inicial en pixeles sobre el eje Y. 271 | * @param ancho (int): Tamaño sobre el eje X en pixeles del textField. 272 | * @param alto (int): Tamaño sobre el eje Y en pixeles del textField. 273 | * @param fuente (Font): Tipo de fuente que tendrá el texto del textField. 274 | * @param colorFondo (Color): Color de fondo o Background del textField. 275 | * @param colorFuente (Color): Color de la letra o ForeGround del textField. 276 | * @param colorCaret (Color): Color del Caret del textField. 277 | * @param borde (Border): Borde del textField. 278 | * @param direccion (String): Dirección de los elementos dentro del textField siendo: 279 | *
    280 | *
  • 'l' (LEFT): Contenido en la izquierda (por defecto).
  • 281 | *
  • 'c' (CENTER): Contenido centrado.
  • 282 | *
  • 'r' (RIGHT): Contenido en la derecha.
  • 283 | *
284 | * @return textField (JTextField): Objeto gráfico tipo JTextField. 285 | * @throws null : Si construye un JTextField sin texto, fuente, colorFondo, colorFuente, colorCaret o borde envíe un [null] como parámetro. 286 | */ 287 | public JTextField construirJTextField( 288 | String texto, int x, int y, int ancho, int alto, Font fuente, Color colorFondo, 289 | Color colorFuente, Color colorCaret, Border borde, String direccion 290 | ) { 291 | textField = new JTextField(); 292 | textField.setLocation(x, y); 293 | textField.setSize(ancho, alto); 294 | textField.setText(texto); 295 | textField.setForeground(colorFuente); 296 | textField.setBackground(colorFondo); 297 | textField.setCaretColor(colorCaret); 298 | textField.setFont(fuente); 299 | textField.setBorder(borde); 300 | switch (direccion) { 301 | case "c": 302 | textField.setHorizontalAlignment(SwingConstants.CENTER); 303 | break; 304 | case "r": 305 | textField.setHorizontalAlignment(SwingConstants.RIGHT); 306 | break; 307 | default: 308 | break; 309 | } 310 | return textField; 311 | } 312 | 313 | /** 314 | * Descripción: Esta función se encarga de construir un objeto gráfico tipo JPasswordField. 315 | * @param texto (String): Texto que contiene el passwordField. 316 | * @param x (int): Posición inicial en pixeles sobre el eje X. 317 | * @param y (int): Posición inicial en pixeles sobre el eje Y. 318 | * @param ancho (int): Tamaño sobre el eje X en pixeles del passwordField. 319 | * @param alto (int): Tamaño sobre el eje Y en pixeles del passwordField. 320 | * @param fuente (Font): Tipo de fuente que tendrá el texto del passwordField. 321 | * @param colorFondo (Color): Color de fondo o Background del passwordField. 322 | * @param colorFuente (Color): Color de la letra o ForeGround del passwordField. 323 | * @param colorCaret (Color): Color del Caret del passwordField. 324 | * @param borde (Border): Borde del passwordField. 325 | * @param direccion (String): Dirección de los elementos dentro del passwordField siendo: 326 | *
    327 | *
  • 'l' (LEFT): Contenido en la izquierda (por defecto).
  • 328 | *
  • 'c' (CENTER): Contenido centrado.
  • 329 | *
  • 'r' (RIGHT): Contenido en la derecha.
  • 330 | *
331 | * @return passwordField (JPasswordField): Objeto gráfico tipo JPasswordField. 332 | * @throws null : Si construye un JPasswordField sin texto, fuente, colorFondo, colorFuente, colorCaret o borde envíe un [null] como parámetro. 333 | */ 334 | public JPasswordField construirJPasswordField( 335 | String texto, int x, int y, int ancho, int alto, Font fuente, Color colorFondo, 336 | Color colorFuente, Color colorCaret, Border borde, String direccion 337 | ) { 338 | passwordField = new JPasswordField(); 339 | passwordField.setLocation(x, y); 340 | passwordField.setSize(ancho, alto); 341 | passwordField.setText(texto); 342 | passwordField.setForeground(colorFuente); 343 | passwordField.setBackground(colorFondo); 344 | passwordField.setCaretColor(colorCaret); 345 | passwordField.setBorder(borde); 346 | switch (direccion) { 347 | case "c": 348 | passwordField.setHorizontalAlignment(SwingConstants.CENTER); 349 | break; 350 | case "r": 351 | passwordField.setHorizontalAlignment(SwingConstants.RIGHT); 352 | break; 353 | default: 354 | break; 355 | } 356 | return passwordField; 357 | } 358 | 359 | /** 360 | * Descripción: Esta función se encarga de construir un objeto gráfico tipo JTextArea. 361 | * @param texto (String): Texto que contiene el textArea. 362 | * @param x (int): Posición inicial en pixeles sobre el eje X. 363 | * @param y (int): Posición inicial en pixeles sobre el eje Y. 364 | * @param ancho (int): Tamaño sobre el eje X en pixeles del textArea. 365 | * @param alto (int): Tamaño sobre el eje Y en pixeles del textArea. 366 | * @param fuente (Font): Tipo de fuente que tendrá el texto del textArea. 367 | * @param colorFondo (Color): Color de fondo o Background del textArea. 368 | * @param colorFuente (Color): Color de la letra o ForeGround del textArea. 369 | * @param colorCaret (Color): Color del Caret del textArea. 370 | * @param borde (Border): Borde del textArea. 371 | * @return textArea (JTextArea): Objeto gráfico tipo JTextArea. 372 | * @throws null : Si construye un JTextArea sin texto, fuente, colorFondo, colorFuente, colorCaret o borde envíe un [null] como parámetro. 373 | */ 374 | public JTextArea construirJTextArea( 375 | String texto, int x, int y, int ancho, int alto, Font fuente, 376 | Color colorFondo, Color colorFuente, Color colorCaret, Border borde 377 | ) { 378 | textArea = new JTextArea(); 379 | textArea.setLocation(x, y); 380 | textArea.setSize(ancho, alto); 381 | textArea.setText(texto); 382 | textArea.setFont(fuente); 383 | textArea.setForeground(colorFuente); 384 | textArea.setBackground(colorFondo); 385 | textArea.setCaretColor(colorCaret); 386 | textArea.setBorder(borde); 387 | return textArea; 388 | } 389 | 390 | /** 391 | * Descripción: Esta función se encarga de construir un objeto gráfico tipo JComboBox. 392 | * @param cadena (String): Todas las opciones que tendrá el comboBox, para enviar varias opciones separe cada opcion con un "_". 393 | * @param x (int): Posición inicial en pixeles sobre el eje X. 394 | * @param y (int): Posición inicial en pixeles sobre el eje Y. 395 | * @param ancho (int): Tamaño sobre el eje X en pixeles del comboBox. 396 | * @param alto (int): Tamaño sobre el eje Y en pixeles del comboBox. 397 | * @param fuente (Font): Tipo de fuente que tendrá el texto del comboBox. 398 | * @param colorFondo (Color): Color de fondo o Background del comboBox. 399 | * @param colorFuente (Color): Color de la letra o ForeGround del comboBox. 400 | * @param direccion (String): Dirección de los elementos dentro del comboBox siendo: 401 | *
    402 | *
  • 'l' (LEFT): Contenido en la izquierda (por defecto).
  • 403 | *
  • 'c' (CENTER): Contenido centrado.
  • 404 | *
  • 'r' (RIGHT): Contenido en la derecha.
  • 405 | *
406 | * @return comboBox (JComboBox): Objeto gráfico tipo JComboBox. 407 | * @throws null : Si construye un JComboBox sin texto, fuente, colorFondo o colorFuente envíe un [null] como parámetro. 408 | */ 409 | public JComboBox construirJComboBox( 410 | String cadena, int x, int y, int ancho, int alto, Font fuente, 411 | Color colorFondo, Color colorFuente, String direccion 412 | ) { 413 | comboBox = new JComboBox(); 414 | comboBox.setLocation(x, y); 415 | comboBox.setSize(ancho, alto); 416 | for (String item : cadena.split("_")) { 417 | comboBox.addItem(item); 418 | } 419 | comboBox.setFont(fuente); 420 | comboBox.setBackground(colorFondo); 421 | comboBox.setForeground(colorFuente); 422 | switch (direccion) { 423 | case "c": 424 | ((JLabel) comboBox.getRenderer()).setHorizontalAlignment(SwingConstants.CENTER); 425 | break; 426 | case "r": 427 | ((JLabel) comboBox.getRenderer()).setHorizontalAlignment(SwingConstants.RIGHT); 428 | break; 429 | default: 430 | break; 431 | } 432 | return comboBox; 433 | } 434 | 435 | public static ObjGraficosService getService() { 436 | if (servicio == null) servicio = new ObjGraficosService(); 437 | return servicio; 438 | } 439 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Interfaz Gráfica en Java 2 | 3 | Curso propuesto por el grupo de trabajo Semana de Ingenio y Diseño (**SID**) de la Universidad Distrital Francisco Jose de Caldas. 4 | 5 | ## Monitor 6 | 7 | **Cristian Felipe Patiño Cáceres** - Estudiante de Ingeniería de Sistemas de la Universidad Distrital Francisco Jose de Caldas 8 | 9 | # Clase 6 10 | 11 | ## Objetivos 12 | 13 | * Identificar la forma de incorporar componentes gráficos dentro de una **Single-page app** para que puedan ser visualizados desde la ventana principal. 14 | * Comprender el concepto de navegación y como se gestiona la visibilidad de los diferentes componentes dentro de la vista principal. 15 | * Reconocer la comunicación entre componentes para el paso de acciones e información. 16 | * Considerar la importancia del control en la creación de objetos en memoria y como gestionar la producción desmesurada de estos. 17 | 18 | # Antes de comenzar 19 | 20 | ### **Actualización de Imágenes en recursos** 21 | 22 | Para continuar con la lección deberá actualizar la carpeta **resources/images** ya que se han agregado nuevas imágenes. Estas las puede descargar en este mismo repositorio entrando a la carpeta **Clase6** seguido de **resources/images**. Puede notar que adentro existe una nueva carpeta llamada perfiles, esta también deberá ser agregada ya que tendrá utilidad. 23 |
24 | 25 |

Carpeta perfiles dentro de resources/images en el repositorio

26 |
27 | 28 | ### **Ajustes en el servicio Recursos Service** 29 | 30 | En el servicio **RecursosService** se crea un nuevo objeto decorador **Font**: 31 | 32 | **Declaración:** 33 | ```javascript 34 | // Al inicio del servicio 35 | private Font fontLigera; 36 | ``` 37 | 38 | **Ejemplificación:** 39 | ```javascript 40 | // Dentro del método crearFuentes 41 | fontLigera = new Font("LuzSans-Book", Font.PLAIN, 12); 42 | ``` 43 | 44 | **Método get:** 45 | ```javascript 46 | public Font getFontLigera() { return fontLigera; } 47 | ``` 48 | 49 | También se crea un objeto tipo **ImageIcon**: 50 | 51 | **Declaración:** 52 | ```javascript 53 | // Al inicio del servicio 54 | private ImageIcon iMinimizar; 55 | ``` 56 | 57 | **Ejemplificación:** 58 | ```javascript 59 | // Dentro del método crearImagenes 60 | iMinimizar = new ImageIcon("Clase6/resources/images/minimizar.png"); 61 | ``` 62 | 63 | **Método get:** 64 | ```javascript 65 | public ImageIcon getIMinimizar() { return iMinimizar; } 66 | ``` 67 | 68 | ### **Recordatorio** 69 | 70 | Recordando el recorrido, el componente gráfico **login** esta listo y funcional, tiene una vista agradable para los usuarios, un código modularizado y optimizado, además realiza eventos por acción permitiendo cerrar la aplicación, mostrar la información recibida del usuario o abrir la ventana principal. 71 | 72 |
73 | 74 |

Login de usuario en funcionamiento

75 |
76 | 77 | La ventana principal ya quedo lista para empezar a construir la Single-Page App a traves de componentes gráficos. 78 | 79 |
80 | 81 |

Vista Principal lista para construirse

82 |
83 | 84 | # Componentes Gráficos dentro de un Single-Page App y navegación. 85 | 86 | En esta sesión se verán tres items importantes relacionados con la creación, gestión y navegación de componentes gráficos: 87 | * **Construcción e incorporación de componentes gráficos dentro de Single-Page app**. 88 | * **Navegación y gestión de visibilidad de componentes gráficos**. 89 | * **Control en la creación de componentes gráficos en memoria**. 90 | 91 | 92 | # Construcción e incorporación de componentes gráficos dentro de Single-Page app. 93 | 94 | ## Ajustes 95 | 96 | Ya se realizo una maquetización en la ventana principal y esta cuenta con sus respectivos paneles, los cuales se evidencian por medio de sus colores, sin embargo, su contenido será reemplazado, asi que se procede a retirar el color a los paneles. 97 | 98 |
99 | 100 |

Paneles de VistaPrincipalTemplate sin color

101 |
102 | 103 | Realmente en la ventana principal no se usaran objetos decoradores asi que también se removerá el uso del servicio RecursosService y la importación de la librería Color. 104 | 105 |
106 | 107 |

A la izquierda se ve el código removido y a la derecha el resultado

108 |
109 | 110 | ## Creación e incorporación del Componente Barra Titulo 111 | 112 | Se va a incorporar el componente encargado de mostrar la barra de titulo, primero se crea un nuevo paquete **barraTitulo** dentro del paquete **Components**, en el paquete **barraTitulo** se crearán las clases **BarraTituloTemplate** y **BarraTituloComponent**: 113 | 114 |
115 | 116 |

Creación componente barraTitulo con su respectivo paquete y clases

117 |
118 | 119 | Como se menciono en la sesión anterior, la clase **Component** puede implementar de alguna interfaz que gestiona eventos de ser necesario, en este caso el componente **barraTitulo** contendrá varios botones para realizar acciones como minimizar o cerrar la aplicación por lo que será necesaria la implementación: 120 | 121 | **implementación de interfaz** 122 | ```javascript 123 | public class BarraTituloComponent implements ActionListener{ 124 | } 125 | ``` 126 | **implementación de métodos de la interfaz** 127 | ```javascript 128 | @Override 129 | public void actionPerformed(ActionEvent e) { 130 | } 131 | ``` 132 | 133 | Se crea el atributo que hace referencia a la clase **Template** y se ejemplifica enviándose como argumento una referencia a si misma con la palabra clave **this** para realizar la inyección de dependencias: 134 | 135 | **Declaración** 136 | ```javascript 137 | private BarraTituloTemplate barraTituloTemplate; 138 | ``` 139 | 140 | **Ejemplificación** 141 | ```javascript 142 | // Dentro del constructor 143 | this.barraTituloTemplate = new BarraTituloTemplate(this); 144 | ``` 145 | Se debe añadir un método **get** de su único atributo **barraTituloTemplate**, para que otros componentes puedan acceder a la clase gráfica del componente como se explico con anterioridad. 146 | 147 | ```javascript 148 | public BarraTituloTemplate getBarraTituloTemplate() { 149 | return this.barraTituloTemplate; 150 | } 151 | ``` 152 | 153 | Ahora se codifica a la clase **BarraTituloTemplate**, esta al tener propiedades gráficas va heredar de un **JPanel**: 154 | ```javascript 155 | public class BarraTituloTemplate extends JPanel{ 156 | } 157 | ``` 158 | 159 | Recibe por parámetro dentro del constructor a la clase **Component** para igualarla con un atributo global de la misma referencia para cerrar la inyección, ademas obtendrá los servicios de **ObjGraficosService** y **RecursosService**: 160 | 161 | **Declaración:** 162 | ```javascript 163 | private BarraTituloComponent barraTituloComponent; 164 | private ObjGraficosService sObjGraficos; 165 | private RecursosService sRecursos; 166 | ``` 167 | 168 | **Obtención de servicios y recibimiento de la clase Component:** 169 | ```javascript 170 | public BarraTituloTemplate(BarraTituloComponent barraTituloComponent){ 171 | this.barraTituloComponent = barraTituloComponent; 172 | this.sObjGraficos= ObjGraficosService.getService(); 173 | this.sRecursos = RecursosService.getService(); 174 | } 175 | ``` 176 | 177 | Como la clase hereda de un **JPanel** es necesario darle propiedades gráficas asi que se realizan varias configuraciones: 178 | ```javascript 179 | // Dentro del constructor al final 180 | this.setSize(850, 50); 181 | this.setBackground(Color.WHITE); 182 | this.setLayout(null); 183 | this.setVisible(true); 184 | ``` 185 | 186 | Note que el tamaño del panel de esta clase **Template** debe ser exactamente igual que el panel en la **VistaPrincipal** al que se incorporará, en este caso a el panel **pBarra**: 187 | 188 |
189 | 190 |

Mismo tamaño de componente con Panel al que se incorporará

191 |
192 | 193 | Se agregarán en el componente 4 objetos gráficos principales, un **Logo**, un **Título**, un **Botón de minimizar** y un **Botón de cerrar**, también se agregarán algunos objetos decoradores, por lo que se realiza el proceso de creación reflejado en las sesiones anteriores: 194 | 195 | **Declaración** 196 | ```javascript 197 | //Declaración objetos gráficos 198 | private JLabel lLogoApp, lTituloApp; 199 | private JButton bCerrar, bMinimizar; 200 | 201 | //Declaración Objetos Decoradores 202 | private ImageIcon iLogoApp, iDimAux; 203 | private Font fontTituloBarra; 204 | ``` 205 | Se puede observar que se creará una fuente que solo se utilizará para el titulo de la interfaz asi que se crea dentro del componente especifico y no en **RecursosService** 206 | 207 | **Método crearObjetosDecoradores:** 208 | ```javascript 209 | public void crearObjetosDecoradores(){ 210 | iLogoApp = new ImageIcon("Clase6/resources/images/logo_app.png"); 211 | fontTituloBarra= new Font("Britannic Bold", Font.PLAIN, 24); 212 | } 213 | ``` 214 | 215 | **Método crearJButtons:** 216 | ```javascript 217 | public void crearJButtons(){ 218 | // BOTÓN CERRAR ---------------------------------------------------- 219 | iDimAux = new ImageIcon( 220 | sRecursos.getICerrar().getImage() 221 | .getScaledInstance(23, 23, Image.SCALE_AREA_AVERAGING) 222 | ); 223 | bCerrar = sObjGraficos.construirJButton( 224 | null, 225 | 800, 10, 45, 30, 226 | sRecursos.getCMano(), 227 | iDimAux, 228 | null, null, null, null, 229 | "c", 230 | false 231 | ); 232 | bCerrar.addActionListener(barraTituloComponent); 233 | this.add(bCerrar); 234 | 235 | // BOTÓN MINIMIZAR ---------------------------------------------------- 236 | iDimAux = new ImageIcon( 237 | sRecursos.getIMinimizar().getImage() 238 | .getScaledInstance(28, 28, Image.SCALE_AREA_AVERAGING) 239 | ); 240 | bMinimizar = sObjGraficos.construirJButton( 241 | null, 242 | 750, 10, 45, 30, 243 | sRecursos.getCMano(), 244 | iDimAux, 245 | null, null, null, null, 246 | "c", 247 | false 248 | ); 249 | bMinimizar.addActionListener(barraTituloComponent); 250 | this.add(bMinimizar); 251 | } 252 | ``` 253 | Como el botón cerrar va a utilizar la misma imagen usada en el login se llama al servicio **RecursosService** para obtener dicha imagen compartida. También se observa que se agrego de una vez la propiedad **addActionListener** en ambos botones. 254 | 255 | **Método crearJLabels:** 256 | ```javascript 257 | public void crearJLabels(){ 258 | // LABEL LOGO APP-------------------------------------------------------------------- 259 | iDimAux = new ImageIcon( 260 | iLogoApp.getImage() 261 | .getScaledInstance(50, 50, Image.SCALE_AREA_AVERAGING) 262 | ); 263 | lLogoApp = sObjGraficos.construirJLabel( 264 | null, 265 | 20, 0, 50, 50, 266 | null, 267 | iDimAux, 268 | null, null, null, null, 269 | "c" 270 | ); 271 | this.add(lLogoApp); 272 | 273 | // LABEL TITULO APP-------------------------------------------------------------------- 274 | lTituloApp = sObjGraficos.construirJLabel( 275 | "ProductList", 276 | 40, 5, 200, 40, 277 | null, null, 278 | fontTituloBarra, 279 | null, 280 | sRecursos.getColorPrincipal(), 281 | null, 282 | "c" 283 | ); 284 | this.add(lTituloApp); 285 | } 286 | ``` 287 | Note que en el label **lTituloApp** se esta usando la fuente exclusiva de este componente gráfico. 288 | 289 | **Llamada de métodos de creación desde el constructor:** 290 | ```javascript 291 | //Dentro del constructor después de obtener servicios 292 | this.crearObjetosDecoradores(); 293 | this.crearJLabels(); 294 | this.crearJButtons(); 295 | ``` 296 | 297 | Por ultimo se crean métodos **get** para los botones para puedan ser manipulados desde la clase **Component**: 298 | ```javascript 299 | public JButton getBCerrar() { return bCerrar; } 300 | 301 | public JButton getBMinimizar() { return bMinimizar; } 302 | ``` 303 | 304 | La clase **Template** del componente **barraTitulo** esta lista. Por otro lado para la clase **Component** solo falta añadir la configuración de los eventos de acción. En este caso serán el de minimizar y salir de la aplicación, primero se procede a crear una discriminación por objetos: 305 | ```javascript 306 | @Override 307 | public void actionPerformed(ActionEvent e) { 308 | if (e.getSource() == barraTituloTemplate.getBMinimizar()) 309 | // Acción para minimizar 310 | if (e.getSource() == barraTituloTemplate.getBCerrar()) 311 | // Acción para Cerrar 312 | } 313 | ``` 314 | ### **Comunicación bidireccional entre componentes gráficos** 315 | Note que aunque el componente **barraTitulo** contiene los botones que realizan estas acciones, el componente que se debe encargar realmente de cerrar o minimizar la ventana debe ser **vistaPrincipal**. Así que se crean los métodos encargados de realizar estas acciones dentro de la clase **VistaPrincipalComponent**: 316 | ```javascript 317 | // Dentro de la clase VistaPrincipalComponent 318 | public void cerrar() { 319 | System.exit(0); 320 | } 321 | 322 | public void minimizar() { 323 | this.vistaPrincipalTemplate.setExtendedState(Frame.ICONIFIED); 324 | } 325 | ``` 326 | 327 | El anterior código para minimizar la ventana se debe llamar a la clase de la ventana **VistaPrincipalTemplate** y se usa el método: 328 | 329 | * **setExtendedState:** Que recibe como parámetro un estado de la clase Frame y que cambia la perspectiva de la ventana haciendo posible acciónes como minimizar, expandir etc. El Argumento **Frame.ICONIFIED** le indica a la ventana que se minimize. 330 | 331 | Es necesario para llamar a este estado importar la librería del Frame dentro de la clase VistaPrincipalComponent: 332 | ```javascript 333 | import java.awt.Frame; 334 | ``` 335 | 336 | Ahora se debe llamar a los métodos correspondientes de la vista principal dentro del componente **barraTitulo**, sin embargo es necesario obtener una referencia del componente **vistaPrincipal**, así que se recibirá por parámetro un objeto que haga referencia a la clase component y luego se utilizará: 337 | * **Declaración:** 338 | ```javascript 339 | private VistaPrincipalComponent vistaPrincipalComponent; 340 | ``` 341 | 342 | * **Obtención de referencia por inyección** 343 | ```javascript 344 | public BarraTituloComponent(VistaPrincipalComponent vistaPrincipalComponent) { 345 | this.vistaPrincipalComponent = vistaPrincipalComponent; 346 | ... 347 | ... 348 | } 349 | ``` 350 | 351 | * **Uso de objeto recibido para llamar a los métodos:** 352 | ```javascript 353 | @Override 354 | public void actionPerformed(ActionEvent e) { 355 | if (e.getSource() == barraTituloTemplate.getBMinimizar()) 356 | vistaPrincipalComponent.minimizar(); 357 | if (e.getSource() == barraTituloTemplate.getBCerrar()) 358 | vistaPrincipalComponent.cerrar(); 359 | } 360 | ``` 361 | 362 | En este caso se esta recibiendo una referencia del componente padre **VistaPrincipal** por el constructor creando así una inyección de dependencia y esto crea a su vez una comunicación bidireccional entre ambos componentes, Ahora el componente padre **VistaPrincipal** puede enviar peticiones a **barraTitulo** y viceversa. (Este proceso de comunicación bidireccional entre componentes se explica con mas detalle en la sección de navegación.) 363 | 364 | Esta comunicación entre componentes solo se debe realizar en caso de ser necesario, por lo general solamente existe una comunicación unidireccional donde el componente padre realiza peticiones al hijo nada mas. 365 | 366 | El Componente esta totalmente listo, sin embargo, falta incorporarlo a la ventana principal: 367 | 368 | ### **Incorporación de componente en la Single-Page app** 369 | 370 | En la clase **VistaPrincipalComponent** se va a declarar un objeto del componente **barraTitulo** y como se explico en la sesión anterior, debe hacerse el llamando exclusivamente a la clase **Component**: 371 | 372 | **Declaración:** 373 | ```javascript 374 | //Declaración componentes 375 | private BarraTituloComponent barraTituloComponent; 376 | ``` 377 | **Ejemplificación:** 378 | ```javascript 379 | //Dentro del constructor 380 | this.barraTituloComponent = new BarraTituloComponent(this); 381 | ``` 382 | 383 | Note que dentro de la ejemplificación se enviá una referencia asi misma con la palabra clave **this** para terminar la inyección de dependencias. 384 | 385 | Ahora se realiza la parte **más importante** que es la incorporación del componente a la ventana, como se quiere que al abrir la ventana este componente ya este incorporado se realiza el siguiente proceso dentro del constructor: 386 | * Primero se obtiene el panel que incorporará al componente, en este caso **pBarra** y para esto se llama al método **get** correspondiente de la clase **VistaPrincipalTemplate**: 387 | ```javascript 388 | //Dentro del constructor 389 | vistaPrincipalTemplate.getPBarra(); 390 | ``` 391 | 392 | * Una vez obtenido el panel, se le indica al panel que se agregará un objeto, para eso se llama a su método de configuración **add**: 393 | ```javascript 394 | //Dentro del constructor 395 | vistaPrincipalTemplate.getPBarra().add(); 396 | ``` 397 | 398 | * Se debe especificar que se va a incorporar, entonces dentro de los paréntesis se llama a la clase **Component** que antes se ha ejemplificado: 399 | ```javascript 400 | //Dentro del constructor 401 | vistaPrincipalTemplate.getPBarra().add(barraTituloComponent); 402 | ``` 403 | * Sin embargo la clase **BarraTituloComponent** no cuenta con propiedades gráficas, es la clase **BarraTituloTemplate** la que si las tiene ya que hereda de un **JPanel**, es por eso que el editor muestra un error con el código anterior. Sin embargo, la clase **BarraTituloComponent** tiene un método **get** que devuelve la clase **Template**, asi que se invoca: 404 | ```javascript 405 | //Dentro del constructor 406 | vistaPrincipalTemplate.getPBarra().add( 407 | barraTituloComponent.getBarraTituloTemplate() 408 | ); 409 | ``` 410 | Por cuestiones de espacio horizontal se acomoda la linea de código. 411 | 412 | Si se ejecuta la aplicación y abrimos la ventana principal se observa que se ha incorporado exitosamente su primer componente gráfico: 413 |
414 | 415 |

Vista principal con su primer componente agregado

416 |
417 | 418 | Incluso al darle click al botón de cerrar o al botón minimizar estos funcionarán de forma adecuada. 419 | 420 | ## Creación e incorporación del Componente Navegación Usuario 421 | 422 | Se va a repetir el mismo proceso para el componente gráfico **navegacionUsuario** este componente es el encargado de mostrar en pantalla los botones con los que el usuario podrá navegar dentro de la aplicación. Se crea a continuación su paquete con sus respectivas clases dentro del paquete **components**: 423 | 424 |
425 | 426 |

Creación del componente gráfico navegacionUsuario

427 |
428 | 429 | Se empieza con la clase **Component**, como el componente contendrá botones, es necesaria la implementación de la interfaz **ActionListener** y su método: 430 | ```javascript 431 | public class NavegacionUsuarioComponent implements ActionListener { 432 | 433 | @Override 434 | public void actionPerformed(ActionEvent e) { 435 | } 436 | } 437 | ``` 438 | 439 | Se crea el atributo que referencia a la clase **Template** y se ejemplifica enviándose como argumento a si mismo con la palabra clave **this** para realizar la inyección: 440 | 441 | **Declaración** 442 | ```javascript 443 | private NavegacionUsuarioTemplate navegacionUsuarioTemplate; 444 | ``` 445 | 446 | **Ejemplificación** 447 | ```javascript 448 | //dentro del constructor 449 | this.navegacionUsuarioTemplate = new NavegacionUsuarioTemplate(this); 450 | ``` 451 | 452 | Se debe generar también el método **get** de su clase **Template** correspondiente: 453 | ```javascript 454 | public NavegacionUsuarioTemplate getNavegacionUsuarioTemplate() { 455 | return this.navegacionUsuarioTemplate; 456 | } 457 | ``` 458 | 459 | Ahora en la clase **NavegacionUsuarioTemplate** esta debe heredar de un **JPanel**: 460 | 461 | ```javascript 462 | public class NavegacionUsuarioTemplate extends JPanel{ 463 | } 464 | ``` 465 | 466 | Se obtienen los servicios y la clase **Component** desde el constructor: 467 | 468 | **Declaración de servicios y clase Component** 469 | ```javascript 470 | private NavegacionUsuarioComponent navegacionUsuarioComponent; 471 | private ObjGraficosService sObjGraficos; 472 | private RecursosService sRecursos; 473 | ``` 474 | 475 | **Obtención de servicios y recibimiento del objeto de clase Component** 476 | ```javascript 477 | public NavegacionUsuarioTemplate(NavegacionUsuarioComponent navegacionUsuarioComponent){ 478 | this.navegacionUsuarioComponent = navegacionUsuarioComponent; 479 | this.sObjGraficos= ObjGraficosService.getService(); 480 | this.sRecursos = RecursosService.getService(); 481 | } 482 | ``` 483 | 484 | Se dan las propiedades gráficas al componente gráfico y se debe prestar atención al tamaño ya que debe ser el mismo al panel en la ventana principal que lo va a incorporar, en este caso el panel **pNavegacion**: 485 | ```javascript 486 | // Dentro del constructor 487 | this.setSize(250, 700); 488 | this.setLayout(null); 489 | this.setVisible(true); 490 | ``` 491 | 492 | Este componente va a contener los siguientes objetos gráficos: 493 | 494 | * Panel que muestra información del usuario: 495 | * Label con un icono de usuario. 496 | * Label con el nombre del usuario. 497 | * Label con fotografiá del usuario. 498 | * Label con un pequeño eslogan. 499 | * Panel que contiene los botones de navegación: 500 | * Botones de navegación (serán 6 en total) 501 | 502 | **Declaraciones:** 503 | ```javascript 504 | //Declaración objetos gráficos 505 | private JPanel pSuperior, pInferior; 506 | private JLabel lNombreUsuario, lEslogan, lImagenUsuario, lIconoUsuario; 507 | private JButton bInicio, bPerfil, bAmigos, bProductos, bConfiguracion, bCerrarSesion; 508 | 509 | //Declaración Objetos Decoradores 510 | private ImageIcon iIconoUsuario, iInicio, iPerfil, iAmigos, iProductos, 511 | iConfiguracion, iCerrarSesion, iImagenUsuario, iDimAux; 512 | private Border bVacio; 513 | ``` 514 | 515 | **Método construirJPanels:** 516 | ```javascript 517 | public void crearJPanels(){ 518 | this.pSuperior = sObjGraficos.construirJPanel( 519 | 0, 0, 250, 300, 520 | sRecursos.getColorPrincipal(), 521 | null 522 | ); 523 | this.add(pSuperior); 524 | 525 | this.pInferior = sObjGraficos.construirJPanel( 526 | 0, 300, 250, 400, 527 | sRecursos.getColorPrincipal(), 528 | null 529 | ); 530 | this.add(pInferior); 531 | } 532 | ``` 533 | 534 | **Método crearObjetosDecoradores:** 535 | ```javascript 536 | public void crearObjetosDecoradores(){ 537 | this.iIconoUsuario = new ImageIcon("Clase6/resources/images/usuario_navegacion.png"); 538 | this.iInicio = new ImageIcon("Clase6/resources/images/inicio.png"); 539 | this.iPerfil = new ImageIcon("Clase6/resources/images/perfil.png"); 540 | this.iAmigos = new ImageIcon("Clase6/resources/images/amigos.png"); 541 | this.iProductos = new ImageIcon("Clase6/resources/images/productos.png"); 542 | this.iConfiguracion = new ImageIcon("Clase6/resources/images/configuracion.png"); 543 | this.iCerrarSesion = new ImageIcon("Clase6/resources/images/salir.png"); 544 | this.iImagenUsuario = new ImageIcon("Clase6/resources/images/perfiles/perfil1.png"); 545 | this.bVacio = new EmptyBorder(2, 20, 2, 2); 546 | } 547 | ``` 548 | Se puede observar que se crea un borde vació, este borde será utilizado para crear un espació interno o Padding entre el borde de los botones y el contenido de los mismos. 549 | 550 | **Método crearJLabels:** 551 | ```javascript 552 | public void crearJLabels(){ 553 | // LABEL ICONO USUARIO-------------------------------------------------------------------- 554 | iDimAux = new ImageIcon( 555 | iIconoUsuario.getImage() 556 | .getScaledInstance(40, 40, Image.SCALE_AREA_AVERAGING) 557 | ); 558 | this.lIconoUsuario = sObjGraficos.construirJLabel( 559 | null, 560 | 10, 20, 40, 40, 561 | null, 562 | iDimAux, 563 | null, null, null, null, 564 | "c" 565 | ); 566 | this.pSuperior.add(lIconoUsuario); 567 | 568 | // LABEL NOMBRE USUARIO-------------------------------------------------------------------- 569 | this.lNombreUsuario = sObjGraficos.construirJLabel( 570 | "Nombre de Usuario", 571 | ((this.pSuperior.getWidth() - 200) / 2) + 10, 20, 200, 40, 572 | null, null, 573 | sRecursos.getFontTitulo(), 574 | null, 575 | Color.WHITE, 576 | null, 577 | "c" 578 | ); 579 | this.pSuperior.add(lNombreUsuario); 580 | 581 | // LABEL IMAGEN USUARIO-------------------------------------------------------------------- 582 | iDimAux = new ImageIcon( 583 | iImagenUsuario.getImage() 584 | .getScaledInstance(180, 180, Image.SCALE_AREA_AVERAGING) 585 | ); 586 | this.lImagenUsuario = sObjGraficos.construirJLabel( 587 | null, 588 | (this.pSuperior.getWidth() - 180) / 2, 75, 180, 180, 589 | null, 590 | iDimAux, 591 | null, null, null, null, 592 | "c" 593 | ); 594 | this.pSuperior.add(lImagenUsuario); 595 | 596 | // LABEL ESLOGAN-------------------------------------------------------------------- 597 | this.lEslogan = sObjGraficos.construirJLabel( 598 | "
Nuestros clientes son
lo mas importante
", 599 | (this.pSuperior.getWidth() - 180) / 2, 265, 180, 40, 600 | null, null, 601 | sRecursos.getFontLigera(), 602 | null, 603 | Color.WHITE, 604 | null, 605 | "c"); 606 | this.pSuperior.add(lEslogan); 607 | } 608 | ``` 609 | 610 | Note que en el label **lEslogan** hay algo diferente, y es que el texto se ha escrito dentro de etiquetas **HTML**. Esto es debido a que java no permite dar saltos de linea dentro de un label, es decir que si se escribe **\n** que representa un salto de linea en consola no va a funcionar para los Labels, es por eso que se usan etiquetas HTML para poder dar saltos de linea al texto y ademas brindar de varias otras características como: 611 | * **``** indica que se va a iniciar un formato html y se debe cerrar al final con **``**. 612 | * **`
`** Le da al texto propiedad de centrado, la etiqueta **div** debe tener una etiqueta de cerrado **`
`**. 613 | * **`
`** Le da al texto propiedad de texto justificado, la etiqueta **div** debe tener una etiqueta de cerrado **`
`**. 614 | * **`
`** indica un salto de linea, esto es solo cuando se quiere dar un salto de linea explicito, si no se coloca esta etiqueta de todos modos el html realiza el salto de linea automático una vez ocupa todo el espacio de ancho. 615 | 616 | **Método crear JButtons** 617 | ```javascript 618 | public void crearJButtons(){ 619 | // BOTÓN INICIO-------------------------------------------------------------------- 620 | iDimAux = new ImageIcon( 621 | iInicio.getImage() 622 | .getScaledInstance(20, 20, Image.SCALE_AREA_AVERAGING) 623 | ); 624 | this.bInicio = sObjGraficos.construirJButton( 625 | " Inicio", 626 | 30, 30, 200, 40, 627 | sRecursos.getCMano(), 628 | iDimAux, 629 | sRecursos.getFontMediana(), 630 | null, 631 | Color.WHITE, 632 | bVacio, 633 | "l", 634 | false 635 | ); 636 | this.bInicio.addActionListener(navegacionUsuarioComponent); 637 | this.pInferior.add(bInicio); 638 | 639 | // BOTÓN PERFIL-------------------------------------------------------------------- 640 | iDimAux = new ImageIcon( 641 | iPerfil.getImage() 642 | .getScaledInstance(20, 20, Image.SCALE_AREA_AVERAGING) 643 | ); 644 | this.bPerfil = sObjGraficos.construirJButton( 645 | " Perfil", 646 | 30, 80, 200, 40, 647 | sRecursos.getCMano(), 648 | iDimAux, 649 | sRecursos.getFontMediana(), 650 | null, 651 | Color.WHITE, 652 | bVacio, 653 | "l", 654 | false 655 | ); 656 | this.bPerfil.addActionListener(navegacionUsuarioComponent); 657 | this.pInferior.add(bPerfil); 658 | 659 | // BOTÓN AMIGOS-------------------------------------------------------------------- 660 | iDimAux = new ImageIcon( 661 | iAmigos.getImage() 662 | .getScaledInstance(20, 20, Image.SCALE_AREA_AVERAGING) 663 | ); 664 | this.bAmigos = sObjGraficos.construirJButton( 665 | " Amigos", 666 | 30, 130, 200, 40, 667 | sRecursos.getCMano(), 668 | iDimAux, 669 | sRecursos.getFontMediana(), 670 | null, 671 | Color.WHITE, 672 | bVacio, 673 | "l", 674 | false 675 | ); 676 | this.bAmigos.addActionListener(navegacionUsuarioComponent); 677 | this.pInferior.add(bAmigos); 678 | 679 | // BOTÓN PRODUCTOS-------------------------------------------------------------------- 680 | iDimAux = new ImageIcon( 681 | iProductos.getImage() 682 | .getScaledInstance(20, 20, Image.SCALE_AREA_AVERAGING) 683 | ); 684 | this.bProductos = sObjGraficos.construirJButton( 685 | " Productos", 686 | 30, 180, 200, 40, 687 | sRecursos.getCMano(), 688 | iDimAux, 689 | sRecursos.getFontMediana(), 690 | null, 691 | Color.WHITE, 692 | bVacio, 693 | "l", 694 | false 695 | ); 696 | this.bProductos.addActionListener(navegacionUsuarioComponent); 697 | this.pInferior.add(bProductos); 698 | 699 | // BOTÓN CONFIGURACIÓN-------------------------------------------------------------------- 700 | iDimAux = new ImageIcon( 701 | iConfiguracion.getImage() 702 | .getScaledInstance(20, 20, Image.SCALE_AREA_AVERAGING) 703 | ); 704 | this.bConfiguracion = sObjGraficos.construirJButton( 705 | " Configuraciones", 706 | 30, 230, 200, 40, 707 | sRecursos.getCMano(), 708 | iDimAux, 709 | sRecursos.getFontMediana(), 710 | null, 711 | Color.WHITE, 712 | bVacio, 713 | "l", 714 | false 715 | ); 716 | this.bConfiguracion.addActionListener(navegacionUsuarioComponent); 717 | this.pInferior.add(bConfiguracion); 718 | 719 | // BOTÓN CERRAR SESIÓN-------------------------------------------------------------------- 720 | iDimAux = new ImageIcon( 721 | iCerrarSesion.getImage() 722 | .getScaledInstance(20, 20, Image.SCALE_AREA_AVERAGING) 723 | ); 724 | this.bCerrarSesion = sObjGraficos.construirJButton( 725 | " Cerrar Sesión", 726 | 30, 280, 200, 40, 727 | sRecursos.getCMano(), 728 | iDimAux, 729 | sRecursos.getFontMediana(), 730 | null, 731 | Color.WHITE, 732 | bVacio, 733 | "l", 734 | false 735 | ); 736 | this.bCerrarSesion.addActionListener(navegacionUsuarioComponent); 737 | this.pInferior.add(bCerrarSesion); 738 | } 739 | ``` 740 | 741 | Estos botones tienen unas características peculiares: 742 | * Todos cuentan con una imagen y ademas un texto, esto es posible y el servicio **ObjGraficosService** esta configurado para estos casos. 743 | * Para que exista una separación visible entre el icono y el texto, este ultimo empieza con unos espacios de la forma: 744 |
745 | 746 |

Separación de texto con icono dentro del botón

747 |
748 | 749 | * El botón esta vez cuenta con una dirección hacia la izquierda para que la imágen este antes que el texto, por lo que se envía como argumento **"l"** para el parámetro **dirección**. 750 | * Cuenta con un padding para que exista una separación entre el borde y el contenido, por lo que se utiliza el borde **bVacio**, esto no se verá reflejado aun ya que el botón no cuenta con fondo, pero en futuras sesiones cuando se hable de eventos del Mouse se resaltará la importancia del uso de este borde. 751 | * No tienen fondo por lo que se envía como argumento un **false** para el parámetro **esSolido**. 752 | 753 | **Llamada de métodos de creación desde el constructor:** 754 | ```javascript 755 | //Dentro del constructor después de obtener servicios 756 | this.crearObjetosDecoradores(); 757 | this.crearJPanels(); 758 | this.crearJLabels(); 759 | this.crearJButtons(); 760 | ``` 761 | 762 | El componente gráfico esta casi listo solo falta realizar la configuración de los eventos de acción pero esto se discutirá en la siguiente sección **Navegación y gestión de visibilidad de componentes gráficos**. Por el momento se va a incorporar en la vista principal. 763 | 764 | ### **Incorporación de componente en la Single-Page app** 765 | 766 | Nuevamente en la clase **VistaPrincipalComponent** se declara un objeto del componente **navegacionUsuario** y como se explico en la sesión anterior, debe hacerse el llamando exclusivamente a la clase **Component**. 767 | 768 | **Declaración:** 769 | ```javascript 770 | //Declaración componentes 771 | private NavegacionUsuarioComponent navegacionUsuarioComponent; 772 | ``` 773 | **Ejemplificación:** 774 | ```javascript 775 | //Dentro del constructor 776 | this.navegacionUsuarioComponent = new NavegacionUsuarioComponent(); 777 | ``` 778 | 779 | La incorporación se realiza de la misma manera que se explicó con el anterior componente gráfico, esta vez será incorporado sobre el panel **pNavegacion**: 780 | ```javascript 781 | //Dentro del constructor 782 | vistaPrincipalTemplate.getPNavegacion().add( 783 | navegacionUsuarioComponent.getNavegacionUsuarioTemplate() 784 | ); 785 | ``` 786 | 787 | Si se corre la aplicación y se abre la ventana principal se observa que se ha incorporado exitosamente el segundo componente: 788 |
789 | 790 |

Vista principal con el componente Navegación usuario agregado

791 |
792 | 793 | Sin embargo al dar click sobre cualquiera de los botónes, estos no hacen nada aun, esto se discutirá en la siguiente sección. 794 | 795 | # Navegación y gestión de visibilidad de componentes gráficos. 796 | 797 | Ya están incorporados los dos componentes a la ventana principal, esto da una ventaja enorme ya que cada componente tiene su propia responsabilidad y su código será mucho más entendible. Lo que se quiere hacer ahora es que cuando se oprima cualquiera de los botones del componente **navegacionUsuario** la ventana principal gestione que componentes se verán dentro del panel **pPrincipal** este proceso se conoce como **navegación** que para paginas web se conoce como **enrutamiento** ya que esta gestión de visibilidad de componentes se hace mediante rutas en el navegador, sin embargo dentro del curso se referirá a este proceso como navegación, al final es el mismo resultado lo que se quiere realizar. 798 | 799 | La clase que se debe encargar de gestionar que es visible y que no dentro de la misma es solamente la clase **VistaPrincipalComponent**, se podría pensar que el componente **navegacionUsuario** al tener los botones se debería encargar de esta labor pero es erróneo, es la misma ventana principal la que debe hacer su propia gestión. 800 | 801 | ## Creación de componentes Gráficos 802 | 803 | Primero se van a crear los componentes gráficos a los cuales se quiere gestionar su visibilidad en la ventana principal. 804 | 805 |
806 | 807 |

Creación de componentes para gestionar la navegación

808 |
809 | 810 | A continuación se realiza el proceso de creación de uno de estos componentes (**inicio**), los demás tendrán el mismo proceso salvo por un pequeño cambio en cada uno que se explicará más adelante: 811 | 812 | Se inicia con la codificación de la clase **InicioComponent**: 813 | 814 | * Como por ahora este componente no va a contar con ningún botón no es necesario que implemente ninguna interfaz aun, si en el futuro cuando se este creando este componente con mas detalle se nota que contendrá botónes o necesita eventos se realizará en ese caso la implementación, pero por ahora no: 815 | ```javascript 816 | public class InicioComponent{ 817 | } 818 | ``` 819 | * Se un objeto de la clase **Template** correspondiente y se realiza la inyección: 820 | 821 | **Declaración:** 822 | ```javascript 823 | private InicioTemplate inicioTemplate; 824 | ``` 825 | **Ejemplificación:** 826 | ```javascript 827 | // Dentro del constructor 828 | this.inicioTemplate= new InicioTemplate(this); 829 | ``` 830 | 831 | * Se crea el método **get** Correspondiente: 832 | ```javascript 833 | public InicioTemplate getInicioTemplate() { 834 | return this.inicioTemplate; 835 | } 836 | ``` 837 | 838 | Ahora en la clase **InicioTemplate**: 839 | * Al igual que con los otros componentes creados, esta clase esta heredada de un **JPanel**: 840 | ```javascript 841 | public class InicioTemplate extends JPanel{ 842 | } 843 | ``` 844 | 845 | * Se recibe la inyección como se ha explicado previamente: 846 | 847 | **Declaración:** 848 | ```javascript 849 | private InicioComponent inicioComponent; 850 | ``` 851 | **Recibimiento de inyección e igualación:** 852 | ```javascript 853 | public InicioTemplate(InicioComponent inicioComponent){ 854 | this.inicioComponent = inicioComponent; 855 | } 856 | ``` 857 | * Se configuran las propiedades gráficas al componente: 858 | ```javascript 859 | // Dentro del constructor 860 | this.setSize(850, 600); 861 | this.setBackground(Color.DARK_GRAY); 862 | this.setLayout(null); 863 | this.setVisible(true); 864 | ``` 865 | 866 | Como se ha explicado antes este debe tener exactamente el mismo tamaño que el panel que lo incorporará, en este caso sera el panel **pPrincipal**. 867 | 868 | ***Nota:** Para la creación de los otros componentes gráficos (amigos, configuraciones, perfil, productos) el proceso será exactamente el mismo con la diferencia del color en el **setBackground**, deben ser distintos, esto para diferenciar cada uno de los componentes.* 869 | 870 | ## Comunicación bidireccional entre componentes 871 | 872 | Como lo que se quiere es realizar la gestión de visibilidad desde la clase **VistaPrincipalComponent** pero los botones de activación se encuentra en el componente **navegacionUsuario** debe existir una comunicación bidireccional entre ambos componentes, para lo que realizaremos una **inyección de dependencia entre componentes gráficos** tal y como se realizó con el componente **barraTitulo**. 873 | 874 | * En la clase **NavegacionUsuarioComponent** y se va a recibir por parámetro un objeto de referencia a **VistaPrincipalComponent**: 875 | 876 | ```javascript 877 | public NavegacionUsuarioComponent(VistaPrincipalComponent vistaPrincipalComponent) { 878 | 879 | ... 880 | ``` 881 | 882 | * Se declará un objeto (Atributo) de la misma referencia y se iguala al objeto recibido para que sea conocido de forma global en la clase: 883 | ```javascript 884 | private VistaPrincipalComponent vistaPrincipalComponent; 885 | 886 | public NavegacionUsuarioComponent(VistaPrincipalComponent vistaPrincipalComponent) { 887 | this.vistaPrincipalComponent = vistaPrincipalComponent; 888 | 889 | ... 890 | ``` 891 | 892 | * Ahora en la clase **VistaPrincipalComponent** va a salir un error en la linea en la que se ejemplifico a la clase **NavegacionUsuarioComponent** ya que este exige el envío de un parámetro por constructor de un objeto de tipo **VistaPrincipalComponent**, simplemente entre los paréntesis se coloca un **this** enviándose a si mismo como argumento: 893 | ```javascript 894 | this.navegacionUsuarioComponent = new NavegacionUsuarioComponent(this); 895 | ``` 896 | Ya se ha creado la inyección y con esto hay comunicación bidireccional entre componentes gráficos. 897 | 898 | Antes de continuar, como la clase **VistaPrincipalComponent** se va a encargar de la navegación, se crea un método llamado **mostrarComponente** y recibirá por parámetro un String llamado **comando**: 899 | ```javascript 900 | public void mostrarComponente(String comando){ 901 | } 902 | ``` 903 | 904 | ## Configurando eventos en componente NavegaciónUsuario 905 | 906 | Aprovechando que todos los botones dentro del componente tienen texto, se va a tomar su comando (texto del botón) para ser enviado a la clase **VistaPrincipalComponent** y asi gestionar la navegación. De esta forma se puede evitar también la creación de los métodos **get** dentro de la clase **NavegacionUsuarioTemplate** por cada botón. 907 | 908 | Dentro de la clase **NavegacionUsuarioComponent** específicamente en el método implementado **ActionPerformed** se va a enviar el comando del botón a la vista principal: 909 | 910 | ```javascript 911 | @Override 912 | public void actionPerformed(ActionEvent e) { 913 | this.vistaPrincipalComponent.mostrarComponente(e.getActionCommand()); 914 | } 915 | ``` 916 | 917 | Del anterior código se pueden notar varias cosas: 918 | * Como la gestión de navegación se hace desde la vista principal no es necesario realizar una discriminación de acción desde aquí, esto se realizara en la clase **VistaPrincipalComponent**. 919 | * Es posible notar aquí la importancia de declarar un objeto inyectado para igualarlo dentro del constructor, si esto no se hiciera el objeto inyectado solo existiría dentro del constructor y cuando se intente llamar al método **mostrarComponente** desde el método **actionPerformed** sacaría un error en ejecución ya que para este entorno no existiría el objeto **vistaPrincipalComponent**. 920 | * Recordar que el método **getAtionCommand()** va a retornar el texto que contiene el botón que activo el evento (el que se oprimió) en forma de String asi que puede enviarse sin problema como argumento al método **mostrarComponente**. 921 | 922 | Sin embargo, como se vió anteriormente, para hacer la separación del texto con el icono en cada botón el texto iniciaba con unos espaciós, para probar esto, se realiza una muestra por consola asi: 923 | ```javascript 924 | @Override 925 | public void actionPerformed(ActionEvent e) { 926 | System.out.println(e.getActionCommand()); 927 | this.vistaPrincipalComponent.mostrarComponente(e.getActionCommand()); 928 | } 929 | ``` 930 | Cuando se ejecuta el programa y se oprime cualquier botón del componente **navegacionUsuario** y se observa la consola se puede notar lo siguiente: 931 | 932 |
933 | 934 |

Texto de cada botón con espacios al inicio

935 |
936 | 937 | No se quieren enviar esos espacios que tiene cada botón en su texto por que no se tiene la certeza de cuantos espacios son o si son los mismos en cada botón, ademas contarlos seria un desperdicio de tiempo. 938 | 939 | Se va a hacer uso del método **trim** este método: 940 | * **trim()**: Quita todos los espacios que existan antes y al finalizar un texto dentro de un String. 941 | la configuración queda asi: 942 | 943 | ```javascript 944 | @Override 945 | public void actionPerformed(ActionEvent e) { 946 | System.out.println(e.getActionCommand().trim()); 947 | this.vistaPrincipalComponent.mostrarComponente(e.getActionCommand().trim()); 948 | } 949 | ``` 950 | 951 | Una vez se ejecuta la aplicación y se ve la consola se puede notar lo siguiente: 952 |
953 | 954 |

Texto de cada botón sin espacios al inicio

955 |
956 | 957 | Se puede observar que incluso si existe espacio entre el texto este se conserva como es el caso del comando **cerrar Sesión**. 958 | 959 | ***Nota:** El método para mostrar por consola **(System.out.println)** se uso como una prueba, asi que se puede retirar.* 960 | 961 | ## Configuración de la navegación 962 | 963 | Ya esta casi todo listo para configurar la navegación, ahora se codificará en el método **mostrarComponente** de la clase **VistaPrincipalComponent**. 964 | Una vez se recibe el comando del botón desde el componente **navegacionUsuario** se puede llamar a los demás componentes de acuerdo a la petición del usuario. Esto se realiza con un **switch / case** de la siguiente forma: 965 | 966 | ```javascript 967 | public void mostrarComponente(String comando){ 968 | switch(comando){ 969 | case "Inicio": 970 | break; 971 | case "Perfil": 972 | break; 973 | case "Amigos": 974 | break; 975 | case "Productos": 976 | break; 977 | case "Configuraciones": 978 | break; 979 | case "Cerrar Sesión": 980 | break; 981 | } 982 | } 983 | ``` 984 | 985 | Note que cada caso dentro del **switch** corresponde al comando de cada botón. Ahora dentro de cada caso se va a realizar la incorporación de cada uno de los componentes de acuerdo a la petición. Se realiza el ejemplo para el componente **inicio**, sin embargo para el resto de los componentes es igual: 986 | 987 | ***Nota:** La opción cerrar sesión tendrá un tratamiento diferente y se discutirá de esto en la sección final **Control en la creación de componentes gráficos en memoria** por ahora se deja vacía.* 988 | 989 | * Primero se obtiene el panel que va a incorporar al componente gráfico desde la clase **VistaPrincipalTemplate** con su método **get** correspondiente, en este caso se llama al panel **pPrincipal**: 990 | ```javascript 991 | case "Inicio": 992 | vistaPrincipalTemplate.getPPrincipal(); 993 | break; 994 | ``` 995 | 996 | * Se le indica al panel que va a agregar un Objeto gráfico: 997 | ```javascript 998 | case "Inicio": 999 | vistaPrincipalTemplate.getPPrincipal().add(); 1000 | break; 1001 | ``` 1002 | 1003 | * Ahora se debe indicar al panel que componente será agregado, para esto es posible realizar una **ejemplificación anónima del componente** en cuestión. Para este caso será el componente gráfico **inicio**, se realiza entonces la ejemplificación de la clase **InicioComponent**: 1004 | 1005 | ```javascript 1006 | case "Inicio": 1007 | vistaPrincipalTemplate.getPPrincipal().add(new InicioComponent()); 1008 | break; 1009 | ``` 1010 | 1011 | * Sin embargo como se sabe, la clase **Component** no cuenta con características gráficas por lo que se debe llamar a su clase **Template** correspondiente, se hace a traves del método **get** de esta: 1012 | 1013 | ```javascript 1014 | case "Inicio": 1015 | vistaPrincipalTemplate.getPPrincipal().add( 1016 | new InicioComponent().getInicioTemplate() 1017 | ); 1018 | break; 1019 | ``` 1020 | Se re acomoda el código para no ocupar mucho espacio horizontal. 1021 | 1022 | Esto se realiza con los demás componentes y en teoría estaría listo, sin embargo, si se ejecuta la aplicación y se oprimen los botones se puede notar que este no realiza ningún cambio aparente. 1023 | 1024 | **¿Por qué sucede esto?** 1025 | 1026 | Hacen falta un par de configuraciones adicionales: 1027 | * Para empezar cada vez que se vuelva a llamar un nuevo componente para ser incorporado en el panel **pPrincipal** es necesario que antes de la incorporación se remueva todo lo que este panel contiene, para que esto sea posible se debe llamar al método **removeAll()**. Esto debe hacerse justamente antes de que empiece el switch: 1028 | 1029 | ```javascript 1030 | public void mostrarComponente(String comando){ 1031 | vistaPrincipalTemplate.getPPrincipal().removeAll(); 1032 | switch(comando){ 1033 | ... 1034 | ... 1035 | } 1036 | ``` 1037 | 1038 | * Cada vez que un componente sea agregado en el panel **pPrincipal** se debe actualizar toda la ventana para que esta esta pueda mostrar en la pantalla los cambios ocurridos. Para esto se debe llamar al método **repaint()**. Como este método se realiza una vez se haya incorporado el componente en el panel se debe escribir justo debajo del switch: 1039 | 1040 | ```javascript 1041 | public void mostrarComponente(String comando){ 1042 | vistaPrincipalTemplate.getPPrincipal().removeAll(); 1043 | switch(comando){ 1044 | ... 1045 | ... 1046 | } 1047 | vistaPrincipalTemplate.repaint(); 1048 | } 1049 | ``` 1050 | 1051 | Si se la aplicación y se oprimen los botones de la navegación se puede observar que ya reemplaza los componentes en el panel principal: 1052 | 1053 |
1054 | 1055 |

VentanaPrincipal una vez se oprimió el botón Inicio

1056 |
1057 | 1058 |
1059 | 1060 |

VentanaPrincipal una vez se oprimió el botón Configuraciones

1061 |
1062 | 1063 | # Control en la creación de componentes gráficos en memoria 1064 | 1065 | Cuando se oprima el botón **Cerrar sesión** se quiere que la vista principal deje de ser visible y pueda verse de nuevo el Login. Una opción simple para esto puede ser declarar un objeto de tipo **LoginComponent** desde la clase **VistaPrincipalComponent**, ejemplificarla y decirle a la clase **VistaPrincipalTemplate** que deje de ser visible: 1066 | 1067 |
1068 | 1069 |

Posible caso de regreso al Login

1070 |
1071 | 1072 | El anterior ejemplo funciona, sin embargo, es necesario recordar que cuando se inicio la aplicación la clase ejecutora **App** ya creo un objeto en memoria del componente **login**, y si se realiza el proceso anterior descrito se estaría creando otro objeto en memoria nuevo del componente **login** cada vez que se cierre sesión, ´por ende el objeto que se creo desde **App** quedaría en el *limbo*. 1073 | 1074 | De hecho si se hecha un vistazo a la clase **LoginComponent** en su método **Entrar** se observa que cada vez que se entra a la ventana principal crea un nuevo objeto de esta: 1075 | 1076 |
1077 | 1078 |

Creación de un nuevo objeto cada vez que se entra a la aplicación

1079 |
1080 | 1081 | Esto es un problema enorme, imagine que un usuario entra y cierra sesión 10 veces, en memoria se estarían creando 10 objetos tanto del componente **login** como de **VistaPrincipal**, incluso cuando se habla de objetos en memoria de componentes gráficos en realidad se hace alusión a todas las clases que conforman un componente por lo que el problema se extiende a medida que se entra en mas detalle. Este problema debe ser arreglado. 1082 | 1083 | Para empezar se va a hacer una **inyección de dependencia entre componentes** esta vez no con el propósito de crear una comunicación bidireccional, lo importante de esta inyección es garantizar que solo existirá un objeto en memoria para el componente de login y uno solo para el componente de la vista principal. **Esto no significa que siempre que se quiera controlar la creación de objetos de algún componente se deba realizar inyección de dependencia**, en este caso se hace por que desde el login se va a gestionar la visibilidad de la ventana principal una vez se inicie sesión y desde la ventana principal se va a gestionar la visibilidad del login una vez se cierre sesión y para eso es necesaria una comunicación bidireccional. 1084 | 1085 | Como el programa inicia con el login la inyección se realizará desde la clase **LoginComponent** a la clase **VistaPrincipalComponent**: 1086 | 1087 | * En la clase **LoginComponent**, específicamente en el método **entrar**, cuando se ejemplifica la clase **VistaPrincipalComponent**, se pasa ahora como argumento el **this** para mandar el objeto de esta clase inyectado: 1088 | ```javascript 1089 | this.vistaPrincipal = new VistaPrincipalComponent(this); 1090 | ``` 1091 | 1092 | * En la clase **VistaPrincipalComponent**, ahora se va a recibir por parámetro un objeto de la clase **LoginComponent** y se iguala a un objeto (atributo) declarado del mismo: 1093 | 1094 | ```javascript 1095 | private LoginComponent loginComponent; 1096 | 1097 | public VistaPrincipalComponent(LoginComponent loginComponent){ 1098 | this.loginComponent = loginComponent; 1099 | ... 1100 | } 1101 | ``` 1102 | 1103 | La inyección ya esta hecha y ahora se tiene una comunicación bidireccional entre ambos componentes gráficos, sin embargo, aun no se ha evitado la creación de muchos objetos del componente **VistaPrincipal** para esto dentro del método **entrar** de la clase **LoginComponent** se realiza el siguiente cambio: 1104 | ```javascript 1105 | public void entrar(){ 1106 | if(vistaPrincipal == null) 1107 | this.vistaPrincipal = new VistaPrincipalComponent(this); 1108 | else 1109 | this.vistaPrincipal.getVistaPrincipalTemplate().setVisible(true); 1110 | loginTemplate.setVisible(false); 1111 | } 1112 | ``` 1113 | 1114 | En el anterior código se realiza lo siguiente: 1115 | * Se pregunta si el objeto de la clase **VistaPrincipalComponent** no se ha ejemplificado, si aun no se ha entrado a la vista principal este objeto efectivamente estará vacío ya que no se ha ejemplificado antes. 1116 | * Si este esta vacío se ejemplifica enviando como argumento una referencia de la clase **LoginComponent** con un **this** y asi realizar la inyección. 1117 | * Si este ya se ha ejemplificado previamente (por ejemplo se inicio sesión una vez, se cerro la sesión y se volvió a iniciar) entonces se obtiene la clase **VistaPrincipalTemplate** mediante el método **get** y se le indica que sea Visible nuevamente. 1118 | * Para ambos casos la visibilidad del Login cambiara para que no se vea en pantalla. 1119 | 1120 | Ya se ha arreglado una parte del problema, ahora solo queda configurar finalmente la opción de cerrar sesión. Dentro del método **mostrarComponente** de la clase **VistaPrincipalComponent** en la opción **Cerrar Sesión** se codifica: 1121 | 1122 | ```javascript 1123 | case "Cerrar Sesión": 1124 | this.loginComponent.getLoginTemplate().setVisible(true); 1125 | this.vistaPrincipalTemplate.setVisible(false); 1126 | break; 1127 | ``` 1128 | 1129 | De esta manera se ha controlado la forma de iniciar y cerrar sesión gestionando correctamente la creación de objetos en los componentes gráficos. 1130 | 1131 | Ahora si se observa a las demás opciónes de navegación se puede notar nuevamente que cada vez que se oprime cualquier botón que incorpora los componentes gráficos que se muestran en el panel **pPrincipal** se esta creando un objeto nuevo de estos. Esto es el mismo problema que acabamos de tratar. 1132 | 1133 |
1134 | 1135 |

Problema en creación descontrolada de objetos de los componentes gráficos

1136 |
1137 | 1138 | Para corregir esto, una alternativa puede ser la de **declarar** los objetos de los componentes, **ejemplificarlos** en el constructor e **incorporar** ese objeto en las opciones de navegación: 1139 | 1140 | ***Nota:** Se realizara el proceso solo con el componente gráfico **inicio** pero será igual para los demás componentes*. 1141 | 1142 | **Declaración:** 1143 | ```javascript 1144 | // Al inicio de la clase VistaPrincipalComponent 1145 | private InicioComponent inicioComponent; 1146 | ``` 1147 | 1148 | **Ejemplificación:** 1149 | ```javascript 1150 | // Dentro del constructor 1151 | this.inicioComponent = new InicioComponent(); 1152 | ``` 1153 | 1154 | **Incorporación:** 1155 | ```javascript 1156 | // Dentro del método mostrarComponente 1157 | case "Inicio": 1158 | vistaPrincipalTemplate.getPPrincipal().add( 1159 | inicioComponent.getInicioTemplate() 1160 | ); 1161 | break; 1162 | ``` 1163 | 1164 | Es posible notar que este enfoque funciona y se tiene de forma controlada la creación de sus componentes, sin embargo, como todos los componentes gráficos se van a cargar desde el constructor esto le va a restar rendimiento a la aplicación, imaginen que algún usuario ingresa solamente a revisar los productos y nunca oprime el botón de configuración o amigos, se habrá cargado todo el componente de configuraciones o amigos en vano y gastará memoria y rendimiento. 1165 | 1166 | Una mejor alternativa es la que se uso en la clase **LoginComponent** donde con un condicional se controla la ejemplificación del objeto asi: 1167 | 1168 | ```javascript 1169 | case "Inicio": 1170 | if (this.inicioComponent == null) 1171 | this.inicioComponent = new InicioComponent(); 1172 | vistaPrincipalTemplate.getPPrincipal().add( 1173 | inicioComponent.getInicioTemplate() 1174 | ); 1175 | break; 1176 | ``` 1177 | ***Nota:** Como se esta ejemplificando ahora desde el método mostrarComponente se debe retirar la ejemplificación que se realizó en el constructor*. 1178 | 1179 | De esta forma la primera vez que se oprima el botón inicio se creara el objeto en memoria y se incorporara en la ventana principal, pero cuando se vuelva a oprimir simplemente incorporará el objeto que previamente se ejemplifico. Ademas de controlar la cantidad de objetos también lo se crean solamente en caso de ser necesario y de esta forma se gana también en el rendimiento de la aplicación. 1180 | 1181 | # Resultado 1182 | Si has llegado hasta aquí **!felicitaciones!** se ha aprendido como incorporar componentes gráficos a la ventana principal para crear un Single-Page App. Se aprendió también como realizar navegación para gestionar la visibilidad de los componentes dentro de la ventana principal. Ademas se ha corregido la creación masiva de objetos de los componentes cuando se quiere gestionar su visibilidad. 1183 | 1184 | # Actividad 1185 | 1186 | Realizar la incorporación de componentes gráficos sobre la ventana principal de su proyecto y realizar navegación de tal forma que se controle la creación de objetos en memoria de los componentes. 1187 | --------------------------------------------------------------------------------