elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: [1] 2 3
1  Programación / Java / Re: Varias dudas con WindowsBuilder en: 31 Mayo 2014, 14:24 pm
¿Has buscado en google? Seguramente encuentras respuestas rápidamente.

Como ya creaste el tema te responderé. WindowsBuilder o lo que es en Netbeans GUIBuilder, es una herramienta que te ayuda a crear Interfaces Gráficas de Usuario (GUI). Para hacer pruebas rápidas me parece bien, pero para utilizarlo como herramienta esencial al crear tus GUI, no me parece correcto.

Los GUI Builders generan mucho código basura, además de ser un proceso automatizado en donde no aprenderás ni un carajo. Lo mejor es preocuparse por aprender, y en éste caso significa aprender layouts. Hay muchos tipos de layouts que puedes usar, te recomiendo buscar.

Lo segundo es mi opinión un factor con cierta importancia ya que darle un tamaño fijo a una GUI en una determinada resolución, si se abre en otra resolución más baja, habrá problemas de visualización. Para conseguir que los componentes se adapten al tamaño de la pantalla, debes usar GridBagLayout en el caso de Swing.
2  Programación / Java / Re: Problema cargar foto JPANEL en: 29 Mayo 2014, 01:40 am
1) Crea una clase que herede de JPanel (ésta clase será el panel con el fondo) y Guardas la imagen en un objeto Image:

Código
  1. Image fondo = new ImageIcon(
  2.   getClass().getResource("fondo.jpg")
  3. ).getImage();

2) Lde implementar los controles y todo lo que desees, sobreescribes el método paintComponent.

Código
  1. @Override
  2. protected void paintComponent(Graphics g) {
  3.        super.paintComponent(g);
  4.        g.drawImage(fondo, 0, 0, null);      
  5. }

NOTA: No necesitas llamar al método paintComponent explícitamente, ya que éste es llamado automáticamente por JPanel cada vez que el estado del JPanel cambia (cuando se mueve, se refresca la pantalla, etc). En casos es necesario llamarlo explícitamente, esto se hace con el método repaint.

Código
  1. public class PanelFondo extends JPanel {
  2. Image fondo;
  3.  
  4. public PanelFondo() {
  5. this.setPreferredSize(500,600);
  6. this.add(crearFondo());
  7. }
  8.  
  9. private void crearFondo() {
  10. fondo = new ImageIcon(
  11.   getClass().getResource("fondo.jpg")
  12. ).getImage();
  13. }
  14.  
  15. // ESTE METODO ES LLAMADO AUTOMATICAMENTE POR JPANEL PARA
  16. // PINTAR LA UI, INCLUIDA LA IMAGEN DE FONDO
  17. @Override
  18. protected void paintComponent(Graphics g) {
  19.         super.paintComponent(g);
  20.         g.drawImage(fondo, 0, 0, null);      
  21. }
  22.  
  23. }

3  Programación / Java / Re: Problema cargar foto JPANEL en: 28 Mayo 2014, 15:43 pm
Código
  1. @Override
  2. protected void paintComponent(Graphics g) {
  3.     super.paintComponent(g);
  4.     g.drawImage(image, 0, 0, null);      
  5. }

Recuerda, para dibujar cualquier cosa en un contenedor de JPanel, debes de usar el método paintComponent, que será llamado automáticamente cada vez que hayan cambios en el JPanel (se mueva, etc), así que debes dibujar tu imagen en éste método para que la imagen sea visible todo el tiempo en el JPanel.
4  Programación / Java / Re: Manipular conjuntos de collection en: 28 Mayo 2014, 03:48 am
Usa el método split(expresión), donde 'expresión' es el patrón que se usará para dividir una cadena en uno o más grupos. Por ejemplo:

Código
  1. String dias = "Lunes,Martes,Miercoles,Jueves,Viernes,Sabado,Domingo";
  2. String diaArray[] = dias.split(",");
  3.  
  4. for(String dia : diaArray){
  5.      System.out.println(dia);
  6. }

El resultado es que lo que hay antes y después del caracter ',' se guardará en un array y se devolverá el array final. Ésto aplicado a tu caso, se haría de la siguiente manera:

Código
  1. String linea = "Mates, Ingles, Frances";
  2. String[] idiomas = linea.split(", ");
  3.  
  4. // ahora idiomas = {Mates,Ingles,Frances}
  5. // haces lo que quieres con cada idioma (Mates?)
5  Programación / Programación General / Re: con que se hacen las interfaces modernas en: 27 Mayo 2014, 16:23 pm
Android Studio es un IDE para desarrollar aplicaciones para Android. Como la mayoría de IDE de provee un GUI builder, en donde puedes hacer tus interfaces gráficas de manera rápida y sencilla.

Cita de: robertofd1995
y ademas como puedes integrar codigo css en java

Supongamos que quieres darle estilos a un botón en JavaFX. Primero, debemos crear el botón:

Código
  1. <Button styleClass="botones" fx:id="btnAceptar" text="Limpiar" prefWidth="80.0" prefHeight="30"  layoutX="15.0" layoutY="250.0"/>

Plus: Si quieres agregarle una imagen a tu botón, puedes hacerlo así:

Código
  1. <Button styleClass="botones" fx:id="btnAceptar" text="Limpiar" prefWidth="80.0" prefHeight="30"  layoutX="15.0" layoutY="250.0">
  2.             <graphic>
  3.       <ImageView><Image url="rutapaquete/imagen.png"/></ImageView>
  4.    </graphic>
  5. </Button>

Y en los estilos, en -fx-background-color, pones 'transparent', para que sólo sea visible la imagen del botón.

Entonces, haríamos nuestra hoja de estilos:

Código
  1. .botones {
  2.        -fx-border-radius: 0;
  3.        -fx-background-radius: 0;
  4. -fx-background-color: black;
  5. -fx-text-fill: white;
  6. -fx-font-size: 16px;
  7. -fx-font-weight: bold;
  8. }
  9.  
  10. .botones:pressed {
  11.        -fx-background-color: #a3a3a3;
  12. }

2) Es necesario jalar el archivo .fxml desde una clase Java para que se pueda construir:

Código
  1. public class GUIBuilder {
  2.  
  3. public GUIBuilder() {}
  4.  
  5. public void build() {
  6. Stage ventana = new Stage();
  7. // carga la vista
  8. Parent root = FXMLLoader.load(this.class.getResource("paquete/vista.fxml"));
  9. // agrega la vista a la escena
  10. Scene scene = new Scene(root);
  11. scene.getStyleSheets().add(this.class.getResource("paquete/estilos.css").toExternalForn());
  12. ventana.setScene(scene); // agrega la escena al a ventana
  13. ventana.setResizable(false); // no se puede cambiar el tamanio
  14. ventana.show(); // muestra la ventana
  15. }
  16. }

Y así construimos nuestra interfaz con una hoja de estilos. Aprovechando todo el poder de JavaFX ;)
6  Programación / Java / Re: problema con ListIterador en: 27 Mayo 2014, 16:02 pm
Eso pasa por que el método remove de la interface Interator siempre elimina el último elemento de una lista. Lo que aquí tienes que hacer es identificar la posición en la lista de artículos del artículo actual, luego con el método remove(posicion) de la interface List, eliminas el artículo actual por medio de su posición.
7  Programación / Java / Re: Crear una cola de conexiones de socket. en: 26 Mayo 2014, 20:48 pm
¿Cuando se cierran todas las conexiones, lanza alguna excepción (debería hacerlo) ? Si es así, coloca el StackTrace.

Te dejo un ejemplo extraído del libro Cómo programar en Java, que crea un servidor con una cola de conexiones:

Código
  1. // Configurar un servidor que reciba una conexión de un cliente, envíe
  2. // una cadena al cliente y cierre la conexión.
  3. import java.io.*;
  4. import java.net.*;
  5. import java.awt.*;
  6. import java.awt.event.*;
  7. import javax.swing.*;
  8.  
  9. public class Servidor extends JFrame {
  10.   private JTextField campoIntroducir;
  11.   private JTextArea areaPantalla;
  12.   private ObjectOutputStream salida;
  13.   private ObjectInputStream entrada;
  14.   private ServerSocket servidor;
  15.   private Socket conexion;
  16.   private int contador = 1;
  17.  
  18.   // configurar GUI
  19.   public Servidor()
  20.   {
  21.      super( "Servidor" );
  22.  
  23.      Container contenedor = getContentPane();
  24.  
  25.      // crear campoIntroducir y registrar componente de escucha
  26.      campoIntroducir = new JTextField();
  27.      campoIntroducir.setEditable( false );
  28.      campoIntroducir.addActionListener(
  29.         new ActionListener() {
  30.  
  31.            // enviar mensaje al cliente
  32.            public void actionPerformed( ActionEvent evento )
  33.            {
  34.               enviarDatos( evento.getActionCommand() );
  35.               campoIntroducir.setText( "" );
  36.            }
  37.         }  
  38.      );
  39.  
  40.      contenedor.add( campoIntroducir, BorderLayout.NORTH );
  41.  
  42.      // crear areaPantalla
  43.      areaPantalla = new JTextArea();
  44.      contenedor.add( new JScrollPane( areaPantalla ),
  45.         BorderLayout.CENTER );
  46.  
  47.      setSize( 300, 150 );
  48.      setVisible( true );
  49.  
  50.   } // fin del constructor de Servidor
  51.  
  52.   // configurar y ejecutar el servidor
  53.   public void ejecutarServidor()
  54.   {
  55.      // configurar servidor para que reciba conexiones; procesar las conexiones
  56.      try {
  57.  
  58.         // Paso 1: crear un objeto ServerSocket.
  59.         servidor = new ServerSocket( 12345, 100 );
  60.  
  61.         while ( true ) {
  62.  
  63.            try {
  64.               esperarConexion(); // Paso 2: esperar una conexión.
  65.               obtenerFlujos();        // Paso 3: obtener flujos de entrada y salida.
  66.               procesarConexion(); // Paso 4: procesar la conexión.
  67.            }
  68.  
  69.            // procesar excepción EOFException cuando el cliente cierre la conexión
  70.            catch ( EOFException excepcionEOF ) {
  71.               System.err.println( "El servidor terminó la conexión" );
  72.            }
  73.  
  74.            finally {
  75.               cerrarConexion();   // Paso 5: cerrar la conexión.
  76.               ++contador;
  77.            }
  78.  
  79.         } // fin de instrucción while
  80.  
  81.      } // fin del bloque try
  82.  
  83.      // procesar problemas con E/S
  84.      catch ( IOException excepcionES ) {
  85.         excepcionES.printStackTrace();
  86.      }
  87.  
  88.   } // fin del método ejecutarServidor
  89.  
  90.   // esperar que la conexión llegue, después mostrar información de la conexión
  91.   private void esperarConexion() throws IOException
  92.   {
  93.      mostrarMensaje( "Esperando una conexión\n" );
  94.      conexion = servidor.accept(); // permitir al servidor aceptar la conexión            
  95.      mostrarMensaje( "Conexión " + contador + " recibida de: " +
  96.         conexion.getInetAddress().getHostName() );
  97.   }
  98.  
  99.   // obtener flujos para enviar y recibir datos
  100.   private void obtenerFlujos() throws IOException
  101.   {
  102.      // establecer flujo de salida para los objetos
  103.      salida = new ObjectOutputStream( conexion.getOutputStream() );
  104.      salida.flush(); // vaciar búfer de salida para enviar información de encabezado
  105.  
  106.      // establecer flujo de entrada para los objetos
  107.      entrada = new ObjectInputStream( conexion.getInputStream() );
  108.  
  109.      mostrarMensaje( "\nSe recibieron los flujos de E/S\n" );
  110.   }
  111.  
  112.   // procesar la conexión con el cliente
  113.   private void procesarConexion() throws IOException
  114.   {
  115.      // enviar mensaje de conexión exitosa al cliente
  116.      String mensaje = "Conexión exitosa";
  117.      enviarDatos( mensaje );
  118.  
  119.      // habilitar campoIntroducir para que el usuario del servidor pueda enviar mensajes
  120.      establecerCampoTextoEditable( true );
  121.  
  122.      do { // procesar los mensajes enviados por el cliente
  123.  
  124.         // leer el mensaje y mostrarlo en pantalla
  125.         try {
  126.            mensaje = ( String ) entrada.readObject();
  127.            mostrarMensaje( "\n" + mensaje );
  128.         }
  129.  
  130.         // atrapar problemas que pueden ocurrir al tratar de leer del cliente
  131.         catch ( ClassNotFoundException excepcionClaseNoEncontrada ) {
  132.            mostrarMensaje( "\nSe recibió un tipo de objeto desconocido" );
  133.         }
  134.  
  135.      } while ( !mensaje.equals( "CLIENTE>>> TERMINAR" ) );
  136.  
  137.   } // fin del método procesarConexion
  138.  
  139.   // cerrar flujos y socket
  140.   private void cerrarConexion()
  141.   {
  142.      mostrarMensaje( "\nFinalizando la conexión\n" );
  143.      establecerCampoTextoEditable( false ); // deshabilitar campoIntroducir
  144.  
  145.      try {
  146.         salida.close();
  147.         entrada.close();
  148.         conexion.close();
  149.      }
  150.      catch( IOException excepcionES ) {
  151.         excepcionES.printStackTrace();
  152.      }
  153.   }
  154.  
  155.   // enviar mensaje al cliente
  156.   private void enviarDatos( String mensaje )
  157.   {
  158.      // enviar objeto al cliente
  159.      try {
  160.         salida.writeObject( "SERVIDOR>>> " + mensaje );
  161.         salida.flush();
  162.         mostrarMensaje( "\nSERVIDOR>>> " + mensaje );
  163.      }
  164.  
  165.      // procesar problemas que pueden ocurrir al enviar el objeto
  166.      catch ( IOException excepcionES ) {
  167.         areaPantalla.append( "\nError al escribir objeto" );
  168.      }
  169.   }
  170.  
  171.   // método utilitario que es llamado desde otros subprocesos para manipular a
  172.   // areaPantalla en el subproceso despachador de eventos
  173.   private void mostrarMensaje( final String mensajeAMostrar )
  174.   {
  175.      // mostrar mensaje del subproceso de ejecución despachador de eventos
  176.      SwingUtilities.invokeLater(
  177.         new Runnable() {  // clase interna para asegurar que la GUI se actualice apropiadamente
  178.  
  179.            public void run() // actualiza areaPantalla
  180.            {
  181.               areaPantalla.append( mensajeAMostrar );
  182.               areaPantalla.setCaretPosition(
  183.                  areaPantalla.getText().length() );
  184.            }
  185.  
  186.         }  // fin de la clase interna
  187.  
  188.      ); // fin de la llamada a SwingUtilities.invokeLater
  189.   }
  190.  
  191.   // método utilitario que es llamado desde otros subprocesos para manipular a
  192.   // campoIntroducir en el subproceso despachador de eventos
  193.   private void establecerCampoTextoEditable( final boolean editable )
  194.   {
  195.      // mostrar mensaje del subproceso de ejecución despachador de eventos
  196.      SwingUtilities.invokeLater(
  197.         new Runnable() {  // clase interna para asegurar que la GUI se actualice apropiadamente
  198.  
  199.            public void run()  // establece la capacidad de modificar a campoIntroducir
  200.            {
  201.               campoIntroducir.setEditable( editable );
  202.            }
  203.  
  204.         }  // fin de la clase interna
  205.  
  206.      ); // fin de la llamada a SwingUtilities.invokeLater
  207.   }
  208.  
  209.   public static void main( String args[] )
  210.   {
  211.      Servidor aplicacion = new Servidor();
  212.      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
  213.      aplicacion.ejecutarServidor();
  214.   }
  215.  
  216. }  // fin de la clase Servidor

Código
  1. // Cliente que lee y muestra la información que le envía un Servidor.
  2. import java.io.*;
  3. import java.net.*;
  4. import java.awt.*;
  5. import java.awt.event.*;
  6. import javax.swing.*;
  7.  
  8. public class Cliente extends JFrame {
  9.   private JTextField campoIntroducir;
  10.   private JTextArea areaPantalla;
  11.   private ObjectOutputStream salida;
  12.   private ObjectInputStream entrada;
  13.   private String mensaje = "";
  14.   private String servidorChat;
  15.   private Socket cliente;
  16.  
  17.   // inicializar servidorChat y configurar GUI
  18.   public Cliente( String host )
  19.   {
  20.      super( "Cliente" );
  21.  
  22.      servidorChat = host; // establecer el servidor al que se va a conectar este cliente
  23.  
  24.      Container contenedor = getContentPane();
  25.  
  26.      // crear campoIntroducir y registrar componente de escucha
  27.      campoIntroducir = new JTextField();
  28.      campoIntroducir.setEditable( false );
  29.      campoIntroducir.addActionListener(
  30.         new ActionListener() {
  31.  
  32.            // enviar mensaje al servidor
  33.            public void actionPerformed( ActionEvent evento )
  34.            {
  35.               enviarDatos( evento.getActionCommand() );
  36.               campoIntroducir.setText( "" );
  37.            }
  38.         }  
  39.      );
  40.  
  41.      contenedor.add( campoIntroducir, BorderLayout.NORTH );
  42.  
  43.      // crear areaPantalla
  44.      areaPantalla = new JTextArea();
  45.      contenedor.add( new JScrollPane( areaPantalla ),
  46.         BorderLayout.CENTER );
  47.  
  48.      setSize( 300, 150 );
  49.      setVisible( true );
  50.  
  51.   } // fin del constructor de Cliente
  52.  
  53.   // conectarse al servidor y procesar mensajes del servidor
  54.   private void ejecutarCliente()
  55.   {
  56.      // conectarse al servidor, obtener flujos, procesar la conexión
  57.      try {
  58.         conectarAServidor(); // Paso 1: crear un socket para realizar la conexión
  59.         obtenerFlujos();      // Paso 2: obtener los flujos de entrada y salida
  60.         procesarConexion(); // Paso 3: procesar la conexión
  61.      }
  62.  
  63.      // el servidor cerró la conexión
  64.      catch ( EOFException excepcionEOF ) {
  65.         System.err.println( "El cliente termino la conexión" );
  66.      }
  67.  
  68.      // procesar los problemas que pueden ocurrir al comunicarse con el servidor
  69.      catch ( IOException excepcionES ) {
  70.         excepcionES.printStackTrace();
  71.      }
  72.  
  73.      finally {
  74.         cerrarConexion(); // Paso 4: cerrar la conexión
  75.      }
  76.  
  77.   } // fin del método ejecutarCliente
  78.  
  79.   // conectarse al servidor
  80.   private void conectarAServidor() throws IOException
  81.   {      
  82.      mostrarMensaje( "Intentando realizar conexión\n" );
  83.  
  84.      // crear Socket para realizar la conexión con el servidor
  85.      cliente = new Socket( InetAddress.getByName( servidorChat ), 12345 );
  86.  
  87.      // mostrar la información de la conexión
  88.      mostrarMensaje( "Conectado a: " +
  89.         cliente.getInetAddress().getHostName() );
  90.   }
  91.  
  92.   // obtener flujos para enviar y recibir datos
  93.   private void obtenerFlujos() throws IOException
  94.   {
  95.      // establecer flujo de salida para los objetos
  96.      salida = new ObjectOutputStream( cliente.getOutputStream() );      
  97.      salida.flush(); // vacíar búfer de salida para enviar información de encabezado
  98.  
  99.      // establecer flujo de entrada para los objetos
  100.      entrada = new ObjectInputStream( cliente.getInputStream() );
  101.  
  102.      mostrarMensaje( "\nSe recibieron los flujos de E/S\n" );
  103.   }
  104.  
  105.   // procesar la conexión con el servidor
  106.   private void procesarConexion() throws IOException
  107.   {
  108.      // habilitar campoIntroducir para que el usuario del cliente pueda enviar mensajes
  109.      establecerCampoTextoEditable( true );
  110.  
  111.      do { // procesar mensajes enviados del servidor
  112.  
  113.         // leer mensaje y mostrarlo en pantalla
  114.         try {
  115.            mensaje = ( String ) entrada.readObject();
  116.            mostrarMensaje( "\n" + mensaje );
  117.         }
  118.  
  119.         // atrapar los problemas que pueden ocurrir al leer del servidor
  120.         catch ( ClassNotFoundException excepcionClaseNoEncontrada ) {
  121.            mostrarMensaje( "\nSe recibió un objeto de tipo desconocido" );
  122.         }
  123.  
  124.      } while ( !mensaje.equals( "SERVIDOR>>> TERMINAR" ) );
  125.  
  126.   } // fin del método procesarConexion
  127.  
  128.   // cerrar flujos y socket
  129.   private void cerrarConexion()
  130.   {
  131.      mostrarMensaje( "\nCerrando conexión" );
  132.      establecerCampoTextoEditable( false ); // deshabilitar campoIntroducir
  133.  
  134.      try {
  135.         salida.close();
  136.         entrada.close();
  137.         cliente.close();
  138.      }
  139.      catch( IOException excepcionES ) {
  140.         excepcionES.printStackTrace();
  141.      }
  142.   }
  143.  
  144.   // enviar mensaje al servidor
  145.   private void enviarDatos( String mensaje )
  146.   {
  147.      // enviar objeto al servidor
  148.      try {
  149.         salida.writeObject( "CLIENTE>>> " + mensaje );
  150.         salida.flush();
  151.         mostrarMensaje( "\nCLIENTE>>> " + mensaje );
  152.      }
  153.  
  154.      // procesar los problemas que pueden ocurrir al enviar el objeto
  155.      catch ( IOException excepcionES ) {
  156.         areaPantalla.append( "\nError al escribir el objeto" );
  157.      }
  158.   }
  159.  
  160.   // método utilitario que es llamado desde otros subprocesos para manipular a
  161.   // areaPantalla en el subproceso despachador de eventos
  162.   private void mostrarMensaje( final String mensajeAMostrar )
  163.   {
  164.      // mostrar mensaje del subproceso de ejecución de la GUI
  165.      SwingUtilities.invokeLater(
  166.         new Runnable() {  // clase interna para asegurar que la GUI se actualice apropiadamente
  167.  
  168.            public void run() // actualiza areaPantalla
  169.            {
  170.               areaPantalla.append( mensajeAMostrar );
  171.               areaPantalla.setCaretPosition(
  172.                  areaPantalla.getText().length() );
  173.            }
  174.  
  175.         }  // fin de la clase interna
  176.  
  177.      ); // fin de la llamada a SwingUtilities.invokeLater
  178.   }
  179.  
  180.   // método utilitario que es llamado desde otros subprocesos para manipular a
  181.   // campoIntroducir en el subproceso despachador de eventos
  182.   private void establecerCampoTextoEditable( final boolean editable )
  183.   {
  184.      // mostrar mensaje del subproceso de ejecución de la GUI
  185.      SwingUtilities.invokeLater(
  186.         new Runnable() {  // clase interna para asegurar que la GUI se actualice apropiadamente
  187.  
  188.            public void run()  // establece la capacidad de modificar campoIntroducir
  189.            {
  190.               campoIntroducir.setEditable( editable );
  191.            }
  192.  
  193.         }  // fin de la clase interna
  194.  
  195.      ); // fin de la llamada a SwingUtilities.invokeLater
  196.   }
  197.  
  198.   public static void main( String args[] )
  199.   {
  200.      Cliente aplicacion;
  201.  
  202.      if ( args.length == 0 )
  203.         aplicacion = new Cliente( "127.0.0.1" );
  204.      else
  205.         aplicacion = new Cliente( args[ 0 ] );
  206.  
  207.      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
  208.      aplicacion.ejecutarCliente();
  209.   }
  210.  
  211. } // fin de la clase Cliente
8  Programación / Java / Re: Problema login usuarios en: 26 Mayo 2014, 20:12 pm
Cita de: Winterz
Tengo una ventana tipica de alta usuario con sus correspondientes campos nombre, dni, email y contraseña, lo que no consigo es que me saque un error cuando dejo algun campo vacio de manera que no me permita registrarme si no he introducido todos los campos aunque sea con datos estupidos

Es realmente sencillo, hay diversas formas de validar datos, aquí te pongo un ejemplo:

Código
  1. public class RegistrarClienteControl {
  2.  
  3. final RegistrarClienteGUI GUI;
  4.  
  5. public RegistrarClienteControl(RegistrarClienteGUI referencia) {
  6. gui = referencia;
  7. }
  8.  
  9. public boolean validar(TextField... campos) {
  10. boolean validacion_ok = true;
  11. boolean campos_vacios = false;
  12.  
  13. for(TextField txt : campos) {
  14. if(txt.getText().isEmpty) {
  15. validacion_ok = false;
  16. campos_vacios = true;
  17. break;
  18. }
  19. }
  20.  
  21. if(campos_vacios)
  22. JOptionPane.showMessageDialog(GUI,"No deje campos vacíos.");
  23. else if( !isNumeric(GUI.txtTelefono.getText()) )
  24. JOptionPane.showMessageDialog(GUI,"Algunos campos deben ser numéricos.");
  25.  
  26. return validacion_ok;
  27. }
  28.  
  29. public void guardarCliente() {
  30. boolean exito = validar(GUI.txtNombre, GUI.txtApellido, GUI.txtDireccion, GUI.txtEmail, GUI.txtTelefono);
  31. if(exito) {
  32. // aqui guardas los datos
  33. }
  34. }
  35.  
  36. private boolean isNumeric(String posbl_num) {
  37. try {
  38. Integer.parseInt(posbl_num);
  39. return true;
  40. } catch (NumberFormatException ex) {
  41. return false;
  42. }
  43. }
  44.  
  45. } // FIN

Cita de: Winterz
La otra duda que tengo esque tengo almacenados en un Hashmap a los usuarios que se van registrado, en el momento del login nose como hacer para que te valide las 2 cosas de manera que si encuentra el usuario sepa ya su contraseña y me pueda validar ambos campos.

Cuando se ingrese el usuario y contraseña en el login, en primer lugar debes extraer esos datos. Luego, buscas el usuario en el HashMap, si lo encuentra procedes a comparar las contraseñas.

Código
  1. public class ValidacionLogin {
  2.  
  3. private boolean usuario_existe(String usuario) {
  4. if(listaUsuarios.containsKey(usuario))
  5. return true;
  6. else
  7. return false;
  8. }
  9.  
  10. private boolean validar_password(String usuario, String password_ingresado) {
  11. String password = listaUsuarios.get(usuario);
  12. if(password.equals(password_ingresado))
  13. return true;
  14. else
  15. return false;
  16.  
  17. }
  18.  
  19. public void validar_login() {
  20. String usuario = txtUsuario.getText();
  21. String password = txtPassword.getText();
  22. boolean exito = false;
  23.  
  24. if(usuario_existe(usuario)) {
  25. if(validar_password(password))
  26. ingresar();
  27. else
  28. JOptionPane.showMessageDialog(GUI,"El password ingresado es incorrecto.");
  29. }
  30. else
  31. JOptionPane.showMessageDialog(GUI,"Usuario no existe.");
  32. }
  33.  
  34. public void ingresar() {
  35. // codigo para redireccionar a la pagina del cliente
  36. }
  37.  
  38. } // FIN

Yo te recomendaría que crees una entidad (bean) que represente a los clientes para que guardes los datos en un objeto Cliente. Te pongo un ejemplo:

Código
  1. public class Cliente {
  2. private String nombre;
  3. private String apellido;
  4. private String direccion;
  5. private String email;
  6. private int telefono;
  7.  
  8. public Cliente(String nombre, String apellido, String direccion,
  9. String email, int telefono) {
  10. this.nombre = nombre;
  11. this.apellido = apellido;
  12. this.direccion = direccion;
  13. this.email = email;
  14. this.telefono = telefono;
  15. }
  16.  
  17. public String getNombre() {
  18. return this.nombre;
  19. }
  20.  
  21. public void setNombre(String nombre) {
  22. this.nombre = nombre;
  23. }
  24.  
  25. public String getApellido() {
  26. return this.apellido;
  27. }
  28.  
  29. public void setApellido(String apellido) {
  30. this.apellido = apellido;
  31. }
  32.  
  33. public String getDireccion() {
  34. return this.direccion;
  35. }
  36.  
  37. public void setDireccion(String direccion) {
  38. this.direccion = direccion;
  39. }
  40.  
  41. public String getEmail() {
  42. return this.email;
  43. }
  44.  
  45. public void setEmail(String email) {
  46. this.email = email;
  47. }
  48.  
  49. public int getTelefono() {
  50. return this.telefono;
  51. }
  52.  
  53. public void setTelefono(int telefono) {
  54. this.telefono = telefono;
  55. }
  56.  
  57. } // FIN

Entonces, para registrar al cliente lo haríamos así:

Código
  1. public class RegistrarClienteControl {
  2.  
  3. final RegistrarClienteGUI GUI;
  4. List<Cliente> listaClientes = new ArrayList<>(); // aqui se guardaran los clientes
  5.  
  6. public RegistrarClienteControl(RegistrarClienteGUI referencia) {
  7. gui = referencia;
  8. }
  9.  
  10. public boolean validar(TextField... campos) {
  11. boolean validacion_ok = true;
  12. boolean campos_vacios = false;
  13.  
  14.  
  15. for(TextField txt : campos) {
  16. if(txt.getText().isEmpty) {
  17. validacion_ok = false;
  18. campos_vacios = true;
  19. break;
  20. }
  21. }
  22.  
  23. if(campos_vacios)
  24. JOptionPane.showMessageDialog(GUI,"No deje campos vacíos.");
  25. else if( !isNumeric(GUI.txtTelefono.getText()) )  
  26. JOptionPane.showMessageDialog(GUI,"Algunos campos deben ser numéricos.");
  27.  
  28. return validacion_ok;
  29. }
  30.  
  31. public void guardarCliente() {
  32. boolean exito = validar(GUI.txtNombre, GUI.txtApellido, GUI.txtDireccion, GUI.txtEmail, GUI.txtTelefono);
  33. if(exito) {
  34. String nombre = GUI.txtNombre.getText();
  35. String apellido = GUI.txtApellido.getText();
  36. String direccion = GUI.txtDireccion.getText();
  37. String email = GUI.txtEmail.getText();
  38. int telefono = Integer.parseInt(GUI.txtTelefono.getText());
  39. listaClientes.add(new Cliente(nombre, apellido, direccion, email, telefono));
  40. }
  41. }
  42.  
  43. private boolean isNumeric(String posbl_num) {
  44. try {
  45. Integer.parseInt(posbl_num);
  46. return true;
  47. } catch (NumberFormatException ex) {
  48. return false;
  49. }
  50. }
  51.  
  52. } // FIN

Ahora, para validar el login, haríamos lo siguiente:

Código
  1. public class validacionLogin {
  2.  
  3. private boolean usuario_existe(String usuario) {
  4. boolean existe = false;
  5.  
  6. for(Usuarios u : listaUsuarios) {
  7. if (u.getUsuario().equals(usuario))
  8. existe = true;
  9. break;
  10. }
  11.  
  12. return existe;
  13. }
  14.  
  15. private boolean validar_password(String usuario, String password_ingresado) {
  16. String password = listaUsuarios.get(usuario);
  17. boolean success = false;
  18.  
  19. for(Usuarios u : listaUsuarios) {
  20. if (u.getUsuario().equals(usuario)) {
  21. String password = u.getPassword();
  22. if(password.equals(password_ingresado))
  23. success = true;
  24. }
  25.  
  26. }
  27.  
  28. }
  29.  
  30. public void validar_login() {
  31. String usuario = txtUsuario.getText();
  32. String password = txtPassword.getText();
  33.  
  34. if(usuario_existe(usuario)) {
  35. if(validar_password(password))
  36. ingresar();
  37. else
  38. JOptionPane.showMessageDialog(GUI,"El password ingresado es incorrecto.");
  39. }
  40. else
  41. JOptionPane.showMessageDialog(GUI,"Usuario no existe.");
  42. }
  43.  
  44. public void ingresar() {
  45. // codigo para redireccionar a la pagina del cliente
  46. }
  47.  
  48. } // FIN

Trabajar con entidades (beans) es muy importante en el desarrollo de aplicaciones Java. Recuerda, Java es un lenguaje casi total orientado a objetos, por lo que hay que aprovechar las ventajas que ésto nos trae.

Un saludo.
9  Programación / Programación General / Re: con que se hacen las interfaces modernas en: 25 Mayo 2014, 23:22 pm
hola a todos , se que con java se pueden hacer interfaces pero hasta donde yo se estas estan un poco limitadas , me refiero en que no puedes pasar de crear interfaces estilo w95 (hasta donde llegan mis conocimientos )

¿Interfaces estilo W95? Creo que hasta en Delphi puedes hacer una buenas GUI. En Java tienes a JavaFX, viene a sustituir a Swing como UI Framework y puedes hacer unas GUI realmente muy buenas. Puedes usar css en tus aplicaciones, de ésta manera puedes hacer que luzcan como tú desees. Hay 2 formas de crear una GUI en JavaFX: Por medio de código Java (en sus inicios) y por medio de código XML, que en éste caso se llama FXML.

He hecho muchas GUI en JavaFX, además puedes agregar vídeos a tu GUI, animaciones como transiciones, efectos de desvanecimiento, movimiento, etc. Puedes construir gráficas personalizas y muy ricas muy fácilmente y es perfecto para el patrón MVC, dado que cada GUI en FXML, tiene un controlador que lo maneja. Si hablamos de .NET, tienes a WPF que usa su lenguaje de marcado XAML, similar a JavaFX, puedes hacer muy buenas GUI.

Otro punto es que todo depende del destino de tu aplicación. Por ejemplo:

  • Si quieres gráficos y componentes ricos en una aplicación JavaFX/WPF es tu opción.
  • Si quieres gráficos y componentes ricos y además portabilidad, JavaFX es tu mejor opción, ya que WPF no es soportada por Mono (Mono es la implementación libre de .NET en Linux/Mac) y según los líderes del proyecto, no tienen pensado agregarlo al proyecto.
  •   Si quieres gráficos y componentes ricos, portabilidad y además buen rendimiento, tu opción es QT. QT es un Framework para crear GUI con C++ principalmente, pero existen otros bindings para Python, Java, y muchos más lenguajes. La ventaja de QT C++ es que corre nativamente en el sistema operativo (aunque esto no suele ser un problema en la actualidad según últimos benchmarks). QT con C++ puede consumir 45-60% de RAM de lo consume la misma aplicación escrita en Java y utilizando JavaFX.

JavaFX demo:


QT5 demo:


WPF demo:
10  Programación / Java / Re: Problema con cola en: 25 Mayo 2014, 08:49 am
JPanel llama automáticamente al método paintComponent(Graphics g) cuando se detecta algún posible cambio en la pantalla (movimiento de ventana, etc). Para hacer que un JPanel actualice su gráfica en un momento deseado basta con llamar al método repaint(). También puedes crear un método dibujar(JPanel panel, List<Nodo> nodos) que acepte la lista de nodos actual y un panel, y respecto a eso graficar algo en el panel recibido.
Páginas: [1] 2 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines