martes, 9 de junio de 2015

Desarrollo de una interfaz gráfica en java: limitar el número de caracteres en un campo.

Nos vemos en la necesidad de limitar el numero de caracteres que podemos introducir en un campo cualquiera, por ejemplo, un JTextField.   Para ello realizaremos lo siguiente:





Solo tenemos que generar un evento KeyListener para el componente que deseemos, y añadir el código que limita la entrada de caracteres, diciéndole que si la longitud de los caracteres es, por ejemplo, igual o superior a 30, ignore todos los caracteres sobrantes.


Este es el código que añadimos:

 private void jTextFieldNombreKeyTyped(java.awt.event.KeyEvent evt) {                                          
        if (jTextFieldNombre.getText().length()>= 30){
            evt.consume();
        }


Desarrollo de una interfaz gráfica en java: código para limpiar los componentes.

Requerimos que nuestra aplicación limpie diversos componentes al pulsar el botón "Limpiar".

Para ello creamos un método "ActionPerformed" para limpiar desde el botón:

/**
     * jButtonLimpiarActionPerformed.
     * Realiza las operaciones necesarias para limpiar los datos introducidos
     * si pulsamos en el botón limpiar.
     * 
     * @param evt 
     */
    private void jButtonLimpiarActionPerformed(java.awt.event.ActionEvent evt) {                                               
        //Primero vamos a limpiar todos los jTextField.
        jTextFieldNifNie.setText("");
        jTextFieldTelefono.setText("");
        jTextFieldNombre.setText("");
        jTextFieldApellidos.setText("");
        jTextFieldAsistentesPrevistos.setText("10");
        jTextFieldCodigoPostal.setText("");
        jTextFieldDireccion.setText("");
        jTextFieldNumeroHabitaciones.setText("");
        jTextFieldPoblacion.setText("");
        //Limpiamos el SpinnerFecha: no se si existirá otro método menos engorroso 
        //para limpiar un jSpinner.
        jSpinnerFecha.setModel(new javax.swing.SpinnerDateModel(new java.util.Date(), null, null,                      java.util.Calendar.MONTH));
        //Limpiamos el jListTipoCocina.
        jListTipoCocina.setModel(new javax.swing.AbstractListModel() {
            String[] strings = {"Buffé", "Buffé vegetariano", "Carta", "Cita con el Chef", "No precisa"};

            public int getSize() {
                return strings.length;
            }

            public Object getElementAt(int i) {
                return strings[i];
            }
        });
        //Limpiamos los radioButtons.  Este sí que es un método sencillo para limpiar.
        buttonGroup1.clearSelection();
        //Limpiamos el jSpìnnerJornadasCongreso.
        jSpinnerJornadasCongreso.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(1),                       Integer.valueOf(1), null, Integer.valueOf(1)));
        //Limpiamos el jCheckBoxRequiereHabitaciones. Como se me permite añadirlo
        //a un buttonGroup, lo he hecho para poder aplicar el método clearSelection.
        buttonGroup2.clearSelection();
        //Limpiamos el ComboBox Tipo de habitación.
        jComboBoxTipoHabitacion.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Individual",                "Doble", "Doble dos camas", "Junior Suite"}));
        //Ahora inhabilitamos los campos que deben de estar inhabilitadas de inicio,
        // que son los del panel congreso.
        jSpinnerJornadasCongreso.setEnabled(false);
        jCheckBoxRequiereHabitaciones.setEnabled(false);
        jTextFieldNumeroHabitaciones.setEnabled(false);
        jComboBoxTipoHabitacion.setEnabled(false);
        
    }       

      



domingo, 7 de junio de 2015

Desarrollar una interfaz gráfica en java, activar y desactivar un componente desde un radiobutton.

Queremos activar o desactivar un componente desde al pulsar un radiobutton en concreto. Para ello tenemos varios radiobuttons y solo uno activa el componente.



En la imagen podemos ver que el radiobutton "Congreso" activa el componente "Jornadas del Congreso". Cualquiera de los otros dos radiobuttons no los activará.



Así, en la clase que desarrolla la interfaz gráfica, desarrollamos los siguientes métodos:


/**
     * jRadioButtonBanqueteActionPerformed.
     * Nos aseguramos que al pulsar el Radio Button Banquete, el panel referido
     * a Congreso, permanece inhabilitado.
     * 
     * @param evt 
     */
    private void jRadioButtonBanqueteActionPerformed(java.awt.event.ActionEvent evt) {                                                     

        if (jRadioButtonBanquete.isSelected()) {
            jSpinnerJornadasCongreso.setEnabled(false);
            jCheckBoxRequiereHabitaciones.setEnabled(false);
            jTextFieldNumeroHabitaciones.setEnabled(false);
            jComboBoxTipoHabitacion.setEnabled(false);
        }

    }                                                    

    private void jTextFieldAsistentesPrevistosActionPerformed(java.awt.event.ActionEvent evt) {                                                              


    }                                                             
/**
 * jRadioButtonJornadaActionPerformed.
 * Nos aseguramos que al pulsar el Radio Button Jornada, el panel referido a
 * congreso, permanece inhabilitado.
 * 
 * @param evt 
 */
    private void jRadioButtonJornadaActionPerformed(java.awt.event.ActionEvent evt) {                                                    
        if (jRadioButtonJornada.isSelected()) {
            jSpinnerJornadasCongreso.setEnabled(false);
            jCheckBoxRequiereHabitaciones.setEnabled(false);
            jTextFieldNumeroHabitaciones.setEnabled(false);
            jComboBoxTipoHabitacion.setEnabled(false);
        }
    }                                                   

    /**
     * jRadioButtonCongresoActionPerformed.
     * Nos aseguramos que al pulsar el Radio Button Congreso, el panel referido
     * a  Congreso se habilita.
     * 
     * @param evt 
     */
    private void jRadioButtonCongresoActionPerformed(java.awt.event.ActionEvent evt) {                                                     
        if (jRadioButtonCongreso.isSelected()) {
            jSpinnerJornadasCongreso.setEnabled(true);
            jCheckBoxRequiereHabitaciones.setEnabled(true);

        }

    }                               



Desarrollar una interfaz gráfica en java: validar que la fecha introducida es superior a la fecha del sistema.

En el desarrollo de nuestra interfaz debemos introducir un campo para reservar una fecha para la celebración de un evento.  Cuando el usuario de la aplicación está realizando la reserva, evidentemente no podrá reservar para una fecha inferior o igual a la actual, que siempre será la fecha del sistema sobre el que trabaje nuestra aplicación.


/**
     * validarFechaEvento. Comprueba que la fecha introducida es mayor que la
     * fecha del sistema
     *
     * @return true si <code>el campo 'Fecha Hora'</code> es mayor que la fecha
     * del sistema, y false en caso que sea igual o menor.
     */
    protected static boolean validarFechaEvento() {

        try {
            SimpleDateFormat formateador = new SimpleDateFormat("dd/MM/yy HH:mm");
            Date fechaDate1 = ((Date) VentanaEvento.jSpinnerFecha.getValue());
            Date fechaDate2 = new Date();
            String fechaEvento = formateador.format(fechaDate1);
            String fechaSistema = formateador.format(fechaDate2);
            if (fechaDate1.before(fechaDate2)
                    || (fechaDate1.equals(fechaDate2))) {//Si fecha del evento es menor o igual que fecha evento.
                boolFechaCorrecta = false;
            } else {
                if (fechaDate2.before(fechaDate1)) {
                    boolFechaCorrecta = true;
                } else {
                }
            }
        } catch (Error e) {

            System.out.println("Se Produjo un Error!!!  " + e.getMessage());
        }
        return boolFechaCorrecta;
    }



Ahora solo tenemos que "enlazar" el método a la clase que desarrolla nuestra interfaz gráfica:

//Si el código postal es correcto, pasamos a comprobar la fecha del evento.
                else if (Validar.validarFechaEvento() == false) {
                    JOptionPane.showMessageDialog(null, "La fecha del evento debe de ser mayor"
                            + "que la fecha actual.", "ERROR: Fecha/Hora incorrecta.", JOptionPane.ERROR_MESSAGE);
                    boolDatosCorrectos = false;
                }


Ahora, si introducimos una fecha inferior o igual a la fecha del sistema, la aplicación nos lanzará un mensaje de error.

Desarrollo de una interfaz gráfica en java: validar que no existan campos vacíos.

En la interfaz gráfica que estamos desarrollando queremos desarrollar un método para que compruebe si existen campos vacíos.  En caso de que exista alguno, la aplicación debe de lanzar un mensaje de error.



En la clase Validar.java creamos el método:

/**
     * camposVacios. Comprueba que ninguno de los campos referentes a los datos
     * personales en la ventana Eventos, estén vacíos.
     *
     * @return true si ninguno de los campos referentes a los <code>datos
     * personales</code> está vacío y false en caso contrario.
     */
    protected static boolean camposVacios() {

        if (VentanaEvento.jTextFieldNifNie.getText().isEmpty()
                || VentanaEvento.jTextFieldTelefono.getText().isEmpty()
                || VentanaEvento.jTextFieldNombre.getText().isEmpty()
                || VentanaEvento.jTextFieldApellidos.getText().isEmpty()
                || VentanaEvento.jTextFieldPoblacion.getText().isEmpty()
                || VentanaEvento.jTextFieldDireccion.getText().isEmpty()
                || VentanaEvento.jTextFieldCodigoPostal.getText().isEmpty()) {

            boolDatosPersonales = false;

        } else {
            boolDatosPersonales = true;
        }
        return boolDatosPersonales;
    }



Ahora "enlazamos" el método camposVacios con la clase en la que desarrollamos la interfaz gráfica.

//Validamos que no haya vacío ningún campo referente a los datos personales.
                if (Validar.camposVacios() == false) {
                    JOptionPane.showMessageDialog(null, "No se puede dejar vacío ningún dato personal", "ERROR.                         Campo vacío.", JOptionPane.ERROR_MESSAGE);
                    boolDatosCorrectos = false;
                }


Si dejamos un campo vacío, la aplicación nos lanzará un mensaje de error.

Desarrollo de una interfaz gráfica en java : validar la longitud de un campo.

Vamos a validar la longitud de un campo mediante un método de validación.  Esta es la interfaz donde aparece el campo que queremos validar.


En una clase que podemos llamar por ejemplo " Validar.java"  añadimos el método para validar el campo nombre.  Vamos a crear el método de validación:

 
/**
     * longitudNombre. Valida que el campo del nombre, en la venanta Evento,
     * tenga un máximo de 30 carácteres.
     *
     * @return si el <code>campo nombre</code> tiene más de 30 carácteres
     * devuelve false y true en caso contrario.
     */
    protected static boolean longitudNombre() {
        if (VentanaEvento.jTextFieldNombre.getText().length() > 30) {
            boolLongitudNombre = false;
        } else {
            boolLongitudNombre = true;
        }
        return boolLongitudNombre;
    }


Ahora "enlazamos" el método longitudNombre con la clase en la que desarrollamos la interfaz gráfica.

//Si el teléfono es correcto comprobamos que la longitud del campo nombre no super los 30 carácteres.
                else if (Validar.longitudNombre() == false) {
                    JOptionPane.showMessageDialog(null, "La longitud del campo 'Nombre' debe de ser como\n"
                            + "máximo de 30 carácteres.", "ERROR: longitud de campo incorrecta", JOptionPane.ERROR_MESSAGE);
                    boolDatosCorrectos = false;
                }




Si introducimos más de 30 caracteres en el campo nombre, la aplicación nos lazará un mensaje de error con los detalles del mismo.

jueves, 4 de junio de 2015

Java Swing, modificar el modelo de un spinner

Podemos cambiar el modelo de los spinners que por defecto nos da Netbeans. Las opciones que tenemos son :

  • predeterminado,
  • fecha, 
  • lista,
  • número.

En este vídeo se muestra el proceso.