Herramientas de usuario

Herramientas del sitio


bloque3:usabilidad

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

bloque3:usabilidad [2020/12/20 12:54] – [Clase ResourceBundle] fernandobloque3:usabilidad [2024/09/16 20:55] (actual) – editor externo 127.0.0.1
Línea 436: Línea 436:
 ==== Clase ResourceBundle ==== ==== Clase ResourceBundle ====
 Es la clase sobre la que basamos la internacionalización. Nos permite cargar propiedades de diferentes ficheros dependiendo de las propiedades del objeto ''Locale'' indicado.  Es la clase sobre la que basamos la internacionalización. Nos permite cargar propiedades de diferentes ficheros dependiendo de las propiedades del objeto ''Locale'' indicado. 
 +
 +Mediante el método estático ''getBundle()'' indicamos las propiedades de localización. Podemos indicarle un objeto ''Locale'' o que se utilice el actual:
 +
 +  * **getBundle**("miResourceBundle", locale) -> Usa el objeto ''Locale'' indicado en el parámetro //locale//
 +  * **getBundle**("miResourceBundle") -> Usa el objeto ''Locale'' actual (el que devuelve Locale.getDefault())
  
 <code java> <code java>
Línea 443: Línea 448:
  
 String texto = bundle.getString("btnNuevoUsuario");   //Obtengo "Nuevo" String texto = bundle.getString("btnNuevoUsuario");   //Obtengo "Nuevo"
- 
  
 //Nos carga el fichero EtiquetasBundle_en.properties (inglés) //Nos carga el fichero EtiquetasBundle_en.properties (inglés)
Línea 452: Línea 456:
  
 //Si no pasamos un parametro Locale, usa el actual (Locale.getDefault()) //Si no pasamos un parametro Locale, usa el actual (Locale.getDefault())
 +Locale.setDefault(Locale.UK);
 ResourceBundle bundle = ResourceBundle.getBundle("EtiquetasBundle"); ResourceBundle bundle = ResourceBundle.getBundle("EtiquetasBundle");
 </code> </code>
Línea 505: Línea 510:
  
 {{ :bloque3:splashscreen.png?direct&400 |}} {{ :bloque3:splashscreen.png?direct&400 |}}
- 
-Para emplear una //SplashScreen// en nuestra aplicación, no nos queda otro remedio que emplear un hilo de ejecución disferente al principal de nuestra aplicación. De este modo mientras se realizan las operaciones pertinentes, puedo mostrar una ventana con una barra de progreso en otro hilo de ejecución distinto. 
  
 El siguiente código se puede descargar y muestra un ejemplo de una ventana de carga con una imagen y una barra de carga: El siguiente código se puede descargar y muestra un ejemplo de una ventana de carga con una imagen y una barra de carga:
Línea 521: Línea 524:
 import javax.swing.SwingConstants; import javax.swing.SwingConstants;
  
-public class SplashScreen2 extends JDialog implements Runnable{+public class SplashScreen2 extends JDialog{
  
- private static final long serialVersionUID = 1L; +   private JProgressBar barraProgreso;
- private JProgressBar barraProgreso;+
   
- public SplashScreen2() { +   public SplashScreen2() { 
- setBounds(100, 100, 637, 566); +      setBounds(100, 100, 637, 566); 
-  +      JPanel contentPane = new JPanel(); 
- JPanel contentPane = new JPanel(); +      contentPane.setLayout(new BorderLayout()); 
- contentPane.setLayout(new BorderLayout()); +      setContentPane(contentPane); 
- setContentPane(contentPane); +    
-  +      //Creo una etiqueta con la imagen en el centro 
- //Creo una etiqueta con la imagen en el centro +      JLabel lblImagen = new JLabel(); 
- JLabel lblImagen = new JLabel(); +      //Indico la imagen que quiero mostrar en la label 
- //Indico la imagen que quiero mostrar en la label +      lblImagen.setIcon(new ImageIcon(SplashScreen.class.getResource("/gui/splash.jpg"))); 
- lblImagen.setIcon(new ImageIcon(SplashScreen.class.getResource("/gui/splash.jpg"))); +      contentPane.add(lblImagen, BorderLayout.CENTER); 
- contentPane.add(lblImagen, BorderLayout.CENTER); +    
-  +      //Creo un panel al sur con una barra de carga y una label para el autor 
- //Creo un panel al sur con una barra de carga y una label para el autor +      JPanel panelInferior = new JPanel(); 
- JPanel panelInferior = new JPanel(); +      panelInferior.setLayout(new GridLayout(2, 1, 0, 0)); 
- panelInferior.setLayout(new GridLayout(2, 1, 0, 0)); +      barraProgreso = new JProgressBar(); 
- barraProgreso = new JProgressBar(); +      //Muestra el % de carga 
- //Muestra el % de carga +      barraProgreso.setStringPainted(true); 
- barraProgreso.setStringPainted(true); +      panelInferior.add(barraProgreso); 
- panelInferior.add(barraProgreso); +    
-  +      JLabel lblFersoft = new JLabel("FerSoft 2020"); 
- JLabel lblFersoft = new JLabel("FerSoft 2020"); +      lblFersoft.setForeground(Color.BLUE); 
- lblFersoft.setForeground(Color.BLUE); +      lblFersoft.setHorizontalAlignment(SwingConstants.CENTER); 
- lblFersoft.setHorizontalAlignment(SwingConstants.CENTER); +      panelInferior.add(lblFersoft); 
- panelInferior.add(lblFersoft); +    
-  +      //Anado el panel inferior al principal 
- //Anado el panel inferior al principal +      contentPane.add(panelInferior, BorderLayout.SOUTH); 
- contentPane.add(panelInferior, BorderLayout.SOUTH); +    
-  +      setResizable(false); //Impedir redimensionar la ventana 
- setResizable(false); //Impedir redimensionar la ventana +      setUndecorated(true); //Eliminar la barra de título y sus botones 
- setUndecorated(true); //Eliminar la barra de título y sus botones +      setLocationRelativeTo(null); //Mostrar en el centro 
- setLocationRelativeTo(null); //Mostrar en el centro +      setVisible(true); 
- setVisible(true); +    
- } +      try { 
-  +         iniciarBarraCarga(); 
- //Metodo implementado por Runnable +      } catch (InterruptedException e) { 
- @Override +         throw new RuntimeException(e); 
- public void run() { +      } 
-    try { +      //Al terminar la carga cierro la ventana 
-              //Cada 20ms avanzamos la barra de progreso 0-100 +      dispose(); 
-              for(int i = 0; i < 100; i++) { +   } 
-                 Thread.sleep(20); +    
-                 barraProgreso.setValue(i); +   private void iniciarBarraCarga() throws InterruptedException { 
-              +      for(int i = 0; i <100; i++){ 
-           catch (InterruptedException ie) { +         Thread.sleep(20); 
-            ie.printStackTrace(); +         actualizarBarraProgreso(i); 
-           +      
-    //Al terminar la espera cierro el JDialog +   } 
-    dispose(); + 
- }+   private void actualizarBarraProgreso(int valor) { 
 +      SwingUtilities.invokeLater(new Runnable() { 
 +         @Override 
 +         public void run() { 
 +            progressBar1.setValue(valor); 
 +         
 +      }); 
 +   }
 } }
 </file> </file>
Línea 589: Línea 598:
    Vista vista = new Vista();    Vista vista = new Vista();
  
-   //El controlador arranca y realiza las operaciones necesarias+   //El controlador arranca 
    Controlador controlador = new Controlador(vista, modelo);    Controlador controlador = new Controlador(vista, modelo);
  
-   //Creamos el hilo +   SplashScreen splash = new SplashScreen(); 
-   Thread hilo new Thread(new SplashScreen()); +  
-   //Iniciamos el hilo de la splash screen +
-   hilo.start(); +
- +
-   //hacemos que el hilo principal espere a que termine el hilo splashScreen (join()) +
-   try { +
-      hilo.join(); +
-   } catch (InterruptedException e) { +
-      e.printStackTrace(); +
-   } +
- +
    //Cuando ha terminado la ejecucion del SplashScreen    //Cuando ha terminado la ejecucion del SplashScreen
-   // continua la ejecucion del hilo principal+   // se muestra la ventana principal
    vista.setVisible(true);    vista.setVisible(true);
 } }
 </code> </code>
 +Esta //SplashScreen// es simplemente decorativa, pero podría realizar un trabajo en algún otro hilo de la propia clase y que solo se cierre cuando se haya terminado, dando paso a la ventana principal.
 ===== Ayuda y manuales de usuario ===== ===== Ayuda y manuales de usuario =====
 Cuando trabajamos con alguna aplicación de software hay una parte común en todas ellas y es la sección de ayuda. Esta sección nos ofrece la documentación de usuario del software, y la forma de mostrarla y acceder a ella puede ser más o menos interactiva. En nuestro caso debemos crear una sección que permita al menos visualizar los manuales de usuario de nuestro software. Cuando trabajamos con alguna aplicación de software hay una parte común en todas ellas y es la sección de ayuda. Esta sección nos ofrece la documentación de usuario del software, y la forma de mostrarla y acceder a ella puede ser más o menos interactiva. En nuestro caso debemos crear una sección que permita al menos visualizar los manuales de usuario de nuestro software.
bloque3/usabilidad.1608468873.txt.gz · Última modificación: 2024/09/16 20:55 (editor externo)