Foros del Web » Programación para mayores de 30 ;) » Java »

ProgressBar

Estas en el tema de ProgressBar en el foro de Java en Foros del Web. Hola amigos, necesito una mano con lo siguiente. tengo una app (anda peeeero) que quiero agregarle cuando inicia un progressbar simple (hasta que carga los ...
  #1 (permalink)  
Antiguo 18/09/2013, 14:35
 
Fecha de Ingreso: octubre-2010
Mensajes: 154
Antigüedad: 14 años, 1 mes
Puntos: 5
ProgressBar

Hola amigos, necesito una mano con lo siguiente.
tengo una app (anda peeeero) que quiero agregarle cuando inicia un progressbar simple (hasta que carga los datos de usuario y pass con hibernate para loggear el usuario).

pero no logro hacer que corra el progressbar y a la par inicie y cargue el hibernate con los usuarios existentes para hacer la prueba de usuarios correctos/invalidos.

el progress con correr y cerrarse ya esta, es solo para distraer al usuario minetras se inicia el hibernate. (me hace una ejecución lineal... corre el progress y cuando termina comienza a cargar los user-pass)


Código Ventana del loggin:
Ver original
  1. package Presentacion.Login;
  2.  
  3. import javax.swing.*;
  4.  
  5. import org.hibernate.Query;
  6. import org.hibernate.Session;
  7.  
  8. import Fisica.SessionFactoryUtil;
  9. import Hibernate.Usuario;
  10. import Presentacion.Main.Principal;
  11. import Presentacion.Login.Progress;
  12.  
  13. import java.io.*;
  14. import java.util.Iterator;
  15. import java.util.List;
  16. import java.awt.*;
  17. import java.awt.event.*;
  18.  
  19. public class VentanaLogin extends JFrame
  20. {
  21.         private JTextField txtUser, txtPass;
  22.         private JLabel lblUser, lblPass;
  23.         private JButton btnAceptar, btnCancelar;
  24.         String usuario, elPassword;
  25.         public int user;
  26.         public String titulo;
  27.         List<Usuario> listUser;
  28.  
  29.     public VentanaLogin()
  30.     {
  31.         Progress p = new Progress();
  32.         p.verBarra();
  33.        
  34.         listUser = this.consultaUser();
  35.        
  36.         Container contenedor = getContentPane();
  37.         contenedor.setLayout(new FlowLayout());
  38.  
  39.         // crear etiqueta y cuadro de texto del usuario
  40.         txtUser = new JTextField(10);
  41.         lblUser = new JLabel("Usuario: ");
  42.         txtUser.setToolTipText("Escriba su nombre de usuario");      
  43.         contenedor.add( Box.createVerticalStrut(50) );
  44.         contenedor.add(lblUser);
  45.         contenedor.add(txtUser);
  46.  
  47.         //crear etiqueta y cuadro de texto del pw
  48.         txtPass = new JPasswordField(10);
  49.         lblPass = new JLabel("Contraseña: ");
  50.         txtPass.setToolTipText("Escriba su contraseña");
  51.         contenedor.add(lblPass);
  52.         contenedor.add(txtPass);
  53.  
  54.         //Crear y agregar los botones
  55.         btnAceptar = new JButton("Aceptar");
  56.         //establecer Boton aceptar por defecto
  57.         getRootPane().setDefaultButton(btnAceptar);
  58.  
  59.         btnCancelar = new JButton("Cancelar");
  60.         contenedor.add(btnAceptar);
  61.         contenedor.add(btnCancelar);
  62.  
  63.  
  64.       // Crear un escuchador al boton Aceptar
  65.         ActionListener escuchadorbtnAceptar = new ActionListener()
  66.         {
  67.             public void actionPerformed(ActionEvent evt)
  68.             {
  69.                 try
  70.                 {                  
  71.                     //chekar si el usuario escrbio el nombre de usuario y pw
  72.                     if (txtUser.getText().length() > 0 && txtPass.getText().length() > 0 )
  73.                     {
  74.                         // Si el usuario si fue validado correctamente
  75.                         if( validarUsuario( txtUser.getText(), txtPass.getText() ) )    //enviar datos a validar
  76.                         {
  77.                             // Codigo para mostrar la ventana principal
  78. //                            setVisible(false);
  79.                             dispose();
  80.                             Principal ventana1 = new Principal(user, titulo.toUpperCase());
  81.                          }
  82.                         else
  83.                         {
  84.                             JOptionPane.showMessageDialog(null, "El nombre de usuario y/o contrasenia no son validos.");
  85. //                            JOptionPane.showMessageDialog(null, txtUser.getText()+" " +txtPass.getText() );
  86.                             txtUser.setText("");    //limpiar campos
  87.                             txtPass.setText("");      
  88.                              
  89.                             txtUser.requestFocusInWindow();
  90.                         }
  91.  
  92.                     }
  93.                     else
  94.                     {
  95.                         JOptionPane.showMessageDialog(null, "Debe escribir nombre de usuario y contrasenia.\n" +
  96.                             "NO puede dejar ningun campo vacio");
  97.                     }
  98.  
  99.                 } catch (Exception e)
  100.                 {
  101.                     e.printStackTrace();
  102.                 }
  103.                  
  104.             }
  105.         };
  106.         btnAceptar.addActionListener(escuchadorbtnAceptar);      // Asociar escuchador para el boton Aceptar
  107.  
  108.  
  109.       // Agregar escuchador al boton Cancelar
  110.         ActionListener escuchadorbtnCancelar=new ActionListener()
  111.         {
  112.             public void actionPerformed(ActionEvent evt)
  113.             {
  114.                 System.exit(0);         // terminar el programa
  115.             }
  116.         };
  117.         btnCancelar.addActionListener(escuchadorbtnCancelar);      // Asociar escuchador para el boton Cancelar
  118.         setTitle("Autentificacion de usuarios");
  119.         setSize(400,150);           // Tamaño del Frame
  120.         setResizable(false);       // que no se le pueda cambiar el tamaño
  121.         //Centrar la ventana de autentificacion en la pantalla
  122.         Dimension tamFrame=this.getSize();//para obtener las dimensiones del frame
  123.         Dimension tamPantalla=Toolkit.getDefaultToolkit().getScreenSize();      //para obtener el tamanio de la pantalla
  124.         setLocation((tamPantalla.width-tamFrame.width)/2, (tamPantalla.height-tamFrame.height)/2);  //para posicionar
  125.         setVisible(true);           // Hacer visible al frame
  126.  
  127.     }   // fin de constructor
  128.  
  129.     //prueba hilo de ejecucion
  130.    
  131.    
  132.     boolean validarUsuario(String elUsr, String elPw)  throws IOException
  133.     {
  134.         try
  135.         {
  136.             Iterator<Usuario> i = listUser.listIterator();
  137.             Usuario u;
  138.             usuario = elUsr.toLowerCase();
  139.             elPassword = elPw.toLowerCase();
  140.             while (i.hasNext()) {
  141.                 u = i.next();
  142.                
  143.                 if(u.getUser().equals(usuario) && u.getPass().equals(elPassword)){
  144.                     this.user = u.getKey();
  145.                     this.titulo = u.getUser().toUpperCase();
  146.                     return true;
  147.                 }
  148.             }
  149.             return false;        //usuario validado incorrectamente
  150.                  
  151.         } catch (Exception e)
  152.         {
  153.             e.printStackTrace();
  154.             return false;
  155.         }
  156.  
  157.     }
  158.    
  159.     public List<Usuario> consultaUser(){
  160.         Session session = SessionFactoryUtil.getSessionFactory().getCurrentSession();
  161.         session.beginTransaction();
  162.        
  163.         List<Usuario> list = null;
  164.         Query query = session.createQuery("from Usuario");
  165.         list = query.list();
  166.        
  167.         session.getTransaction().commit();
  168.         SessionFactoryUtil.getSessionFactory().close();
  169.        
  170.         return list;
  171.    }
  172.      
  173.     public static void main(String[] args)
  174.     {
  175.         VentanaLogin prueba = new VentanaLogin();
  176.         prueba.setDefaultCloseOperation(prueba.EXIT_ON_CLOSE);
  177.     }
  178.  
  179. }

Código Clase Progress:
Ver original
  1. package Presentacion.Login;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. import javax.swing.*;
  6.  
  7.     public class Progress extends JFrame {
  8.    
  9.     JProgressBar current;
  10.     JTextArea out;
  11.     JButton find;
  12.     Thread runner;
  13.     int num = 0;
  14.     static int x, y;
  15.    
  16.     public Progress() {
  17.         super("Cargando");
  18.        
  19.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  20.         JPanel pane = new JPanel();
  21.         pane.setLayout(new FlowLayout());
  22.         current = new JProgressBar(0, 2000);
  23.         current.setValue(0);
  24.         current.setStringPainted(true);
  25.         pane.add(current);
  26.         setContentPane(pane);
  27.     }
  28.          
  29.    
  30.     public void iterate() {
  31.         while (num < 2000) {
  32.         current.setValue(num);
  33.         try {
  34.             Thread.sleep(90);
  35.         } catch (InterruptedException e) { }
  36.         num += 95;
  37.         }
  38.     }
  39.    
  40.     public static void tamaño() {
  41.         //Obtiene el tamaño de la pantalla
  42.         Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
  43.         //obtiene la resolucion de la pantalla en PPP (Puntos por pulgada)
  44.         int sr = Toolkit.getDefaultToolkit().getScreenResolution();
  45.         x = d.width;
  46.         y = d.height;
  47.        }
  48.    
  49.     public void verBarra() {
  50.         tamaño();
  51.         Progress frame = new Progress();
  52.         frame.pack();
  53.         frame.setVisible(true);
  54.         frame.setLocation(2*x/5, 2*y/5);
  55.        
  56.         frame.iterate();
  57.         frame.setVisible(false);
  58.     }
  59.    
  60.     public static void main(String[] arguments) {
  61.         tamaño();
  62.         Progress frame = new Progress();
  63.         frame.pack();
  64.         frame.setVisible(true);
  65.         frame.setLocation(2*x/5, 2*y/5);
  66.         frame.iterate();
  67.         frame.setVisible(false);
  68.     }
  69.    
  70. }

no se si me explico bien, lo que necesito es que corra el progress mientras se van cargando los usuarios y pass en memoria, para cuando abre la ventana de LOGGIN.
(si la ventana de PROGRESS sigue corriendo no importa, quedria atras de la de LOGGIN y cuando termina el progress se cierra, atras del LOGGIN y no se ve.) para luego validar cuando ingresa el usuario. Es mas para que el usuario no rompa los quinotos que el sistema no le responde o esta lento cuando lo inicia. Mostrarle algo que el sistema esta arrancando.

Bueno espero comentario si se puede mejorar u otra idea mejor, de alguien que haya pasado por esto.
Saludos, y desde ya muchas gracias.
  #2 (permalink)  
Antiguo 18/09/2013, 18:23
 
Fecha de Ingreso: junio-2008
Mensajes: 54
Antigüedad: 16 años, 4 meses
Puntos: 19
Respuesta: ProgressBar

Has pensado en poner un gif animado o una animacion flash de un circulo jirando. una vez que inicie sesion el usuario pasara a otra pagina y ya no vera ese gif.
  #3 (permalink)  
Antiguo 19/09/2013, 04:44
 
Fecha de Ingreso: octubre-2010
Mensajes: 154
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: ProgressBar

es una opcion, voy a probar.
gracias por tu respuesta.
  #4 (permalink)  
Antiguo 19/09/2013, 04:45
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: ProgressBar

Hola:

Si haces todo "lineal", el progress ira avanzando en el while pero el codigo no está haciendo otras cosas. Dentro del método iterate() lanza un hilo separado para hacer que avance el progreess y el código siga haciendo otras cosas.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 19/09/2013, 09:27
 
Fecha de Ingreso: octubre-2010
Mensajes: 154
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: ProgressBar

hola chuidiang, estuve probando hacer eso, pero logre agregarle el thread en el iterate(), intente seguir ejemplos simples y me da resultado los hilos, utilizando el sleep, etc... pero cuando se ve que entra en el while se muere el otro, en mi caso.

estoy viendo sino, encarar que me muestre alguna imagen o gif al iniciar... para simplificarlo.

nose
  #6 (permalink)  
Antiguo 07/10/2013, 12:23
 
Fecha de Ingreso: octubre-2010
Mensajes: 154
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: ProgressBar

Cita:
Iniciado por Isakmtz Ver Mensaje
Has pensado en poner un gif animado o una animacion flash de un circulo jirando. una vez que inicie sesion el usuario pasara a otra pagina y ya no vera ese gif.
Hola Isakmtz, estoy probando lo que me comentaste.
estoy probando hacerlo con la clase desktop.

codigo modelo
Código Java:
Ver original
  1. import java.awt.Desktop;
  2. import java.io.File;
  3.  
  4. public class claseDes
  5. {
  6. public static void main(String[]args) throws Exception
  7.  
  8. {
  9. try{
  10.      File arch = new File("archivo.png");
  11.      Desktop.getDesktop().open(arch);
  12.     }
  13. catch (Exception e){
  14.     e.printStackTrace();
  15. }
  16. }
  17. }

y me lo abre con el programa que tengo por defecto de mostrar imagenes.
otra forma seria hacerlo cargando la imagen en un JFrame.

como se puede hacer para que me abra el archivo jpg, png o flash sin ningun programa de imagen, o de que manera crees que se lo puede hacer?

desde ya muchas gacias por cualquier comentario.

Saludos.
  #7 (permalink)  
Antiguo 23/10/2013, 12:56
 
Fecha de Ingreso: octubre-2010
Mensajes: 154
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: ProgressBar

Cita:
Iniciado por Isakmtz Ver Mensaje
Has pensado en poner un gif animado o una animacion flash de un circulo jirando. una vez que inicie sesion el usuario pasara a otra pagina y ya no vera ese gif.
hola Isakmtz, vos sabes que estoy intentando hacer esto, pero me muestra el gif esttico. sera porque uso el ??
Código Java:
Ver original
  1. ImageIcon imagenFondo = new ImageIcon(getClass().getResource("recursos/cargando.gif"));

me base en este ejemplo:
Código Clase FrameCargando:
Ver original
  1. import javax.swing.JFrame;
  2.  
  3. public class FrameCargando extends JFrame{
  4.  
  5.     public static void main (String arg[]){
  6.         FrameCargando fc = new FrameCargando();
  7.         fc.setSize(180,120);
  8.         fc.setVisible(true);
  9.         PanelCargando pc = new PanelCargando();
  10.         fc.add(pc);
  11.     }
  12. }
Código Clase PanelCargando:
Ver original
  1. import java.awt.Dimension;
  2. import java.awt.Graphics;
  3. import java.awt.image.*;
  4.  
  5. import javax.swing.ImageIcon;
  6. import javax.swing.JPanel;
  7.  
  8. public class PanelCargando extends JPanel {
  9.     public PanelCargando() {
  10.         try {
  11.             jbInit();
  12.         } catch (Exception e) {
  13.             e.printStackTrace();
  14.         }
  15.     }
  16.  
  17.     private void jbInit() throws Exception {
  18.         this.setLayout( null );
  19.         this.setSize(new Dimension(200, 150));
  20.     }
  21.    
  22.     public void paintComponent (Graphics g){
  23.         Dimension tamanio = getSize();
  24.         ImageIcon imagenFondo = new ImageIcon(getClass()
  25.                                   .getResource("recursos/cargando.gif"));
  26.         g.drawImage(imagenFondo.getImage(), 0, 0, tamanio.width, tamanio.height, null);
  27.         setOpaque(false);
  28.        
  29.         super.paintComponent(g);
  30.        
  31.     }
  32.    
  33.    
  34. }

estuve mirando si hay algun "gifIcon", pero no hay nada... tendria que probar correrlo en otra pc, no sea que la pc es la que no me lo muestra animado??.
Saludos.
  #8 (permalink)  
Antiguo 23/10/2013, 19:08
 
Fecha de Ingreso: agosto-2013
Mensajes: 103
Antigüedad: 11 años, 3 meses
Puntos: 1
Respuesta: ProgressBar

la verdad es que no estoy muy seguro pero no será por la barra diagonal? A veces me ha ocurrido que eran por esas cosas :S y suelen ser una tontería.
recursos/cargando.gif creo que deberia ser recursos\\imagen.gif, sino, prueba a poner la ruta absoluta (ejemplo C:\\Users\\pepe\\Desktop\\recursos\\cargando.gif)

Jo y a lo mejor me llamas tonto y/o ignorante pero no se si tiene que ver con el sistema operativo el asunto de las barras diagonales. En linux y creo que en mac sería como lo pones tu, y en windows de esta otra manera. Espero confundirme y que encuentres la solucion. Un saludo
  #9 (permalink)  
Antiguo 24/10/2013, 03:32
 
Fecha de Ingreso: noviembre-2012
Mensajes: 40
Antigüedad: 12 años
Puntos: 7
El tema de las barras y contrabarras se soluciona con un simple System.getProperty("file.separator"), asi en funcion del SO utilizara unas u otras.
  #10 (permalink)  
Antiguo 25/10/2013, 02:31
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: ProgressBar

Es más, si usas / siempre funciona, tanto en windows como linux.

El problema puede venir aquí

ImageIcon imagenFondo = new ImageIcon(getClass()
.getResource("recursos/cargando.gif"));

Si usas un getClass().getResource(), la ruta debe ser o bien absoluta ("/recursos/cargando.gif" con / delante) o bien relativa a la ubicación de la clase (la clase va dentro de unos subdirectorios en función del paquete en el que esté, así que debería ser algo como "../../../recursos/cargando.gif, suponiendo que el paquete de esa clase tenga tres niveles.

Además, para que lo encuentre con un getResource(), el recursos/cargando.gif debe estar en el CLASSPATH o bien dentro del jar.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #11 (permalink)  
Antiguo 25/10/2013, 04:57
 
Fecha de Ingreso: octubre-2010
Mensajes: 154
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: ProgressBar

hola amigos, gracias por sus opiniones.
lo de la barra si andaba asi como publique... lo unico que me mostraba el gif sin la animación.
lo que modifique fue que el imageIcon lo meto en un JLabel, y al JLabel lo meto en el JPanel. Asi si me mostraba la animación del archivo gif.
Código cambios:
Ver original
  1. JPanel contentPane;
  2. JLabel imageLabel = new JLabel();
  3. .
  4. .
  5. .
  6. .
  7.  
  8. ImageIcon ii = new ImageIcon(this.getClass().getResource("recursos/cargando.gif"));
  9. imageLabel.setIcon(ii);
  10. contentPane.add(imageLabel, java.awt.BorderLayout.CENTER);

con esas modificaciones simples me muestra como quiero el gif.
espero les sirva.
saludos.

Etiquetas: programa, progressbar, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:56.