viernes, 11 de febrero de 2011

Mensajes en java con showMessageDialog y mensajes personalizados con JDialog.

Mensajes en java con showMessageDialog.


Para mostrar un mensaje en Java se utiliza el showMessageDialog de la librería JOptionPane, con esto conseguiremos un mensaje como el siguiente:

showMessageDialog de JOptionPane
Para ello, tenemos que importar la librería JOptionPane:

import javax.swing.JOptionPane;
//Aqui mostramos el mensaje:
JOptionPane.showMessageDialog(rootPane, "true");//Muestra el mensaje anterior.
Más tipos de mensajes: 
Nota: Estos mensajes se muestran así por que se esta usando substance.


Mensajes personalizados con JDialog.


Si no queremos hacer uso de los mensajes típicos de Java, podemos crear los nuestros con nuevos diseños y opciones personalizadas, a continuación veremos un mensaje personalizado que permite aceptar o cancelar una determinada acción.
Pues bien sin mas ni menos, manos a la obra :

Primero agregamos un formulario de tipo JDialog:



Diseño: Una vez agregado nuestro formulario, en modo diseño podemos hacer algo parecido a lo que veremos a continuación:
JDialog en modo diseño.
Este consta de un JBoton para aceptar, un JBoton para cancelar, y un JLabel que es donde posteriormente mostraremos la pregunta del JDialog.


Ahora una vez hecho el diseño del JDialog, vamos al código y agregamos un atributo privado a esta clase que va a permitir guardar el valor boolean de aceptado(true) o cancelado(false):

       private boolean acep = false; //Atributo para ver si se acepta o no el mensaje, por defecto false.

Luego colocamos en la acción ActionPerformed del boton Aceptar:

        acep=true;
        this.setVisible(false);

Así mismo en la acción ActionPerformed del botón Cancelar:

      this.setVisible(false);

Ahora modificamos el constructor de la clase, para que pida un parámetro más de tipo String para la pregunta que se muestra en el JLabel:

public DialogAcCa(java.awt.Frame parent, boolean modal, String preg) {
        super(parent, modal);
        initComponents();
        setLocationRelativeTo(null);
        this.lblPregunta.setText(preg);
        this.setVisible(true);
        this.setAlwaysOnTop(true);
    }

El método getResponse el que nos regresa el valor de boolean de aceptado o no:

public boolean getResponse(){
return this.acep;
}

Hasta aquí listo el JDialog.

Para llamar o hacer uso de nuestro mensaje se lo hace de la siguiente manera:

//Se crea el dialog, enviando la pregunta como un parámetro.

DialogAcCa D = new DialogAcCa(this, rootPaneCheckingEnabled,"¿Desea Salir?");

        if (D.getResponse()) //D es nuestro Dialog Personalizado, espera la respuesta.
        {  //Operaciones que se realizan al Aceptar el mensaje.
        } else
        { //Operaciones que se realizan al Cancelar el mensaje.
         }

Y tendremos esto:
Mensaje personalizado con JDialog.
 También podemos modificar la propiedad undecorated a true del Dialog y obtenemos algo así:

JDialog con la propiedad undecorated = true.

Este es el código resultante de la Clase DialogAcCa (Nuestro mensaje personalizado JDialog) con las funciones mas importantes:

public class DialogAcCa extends javax.swing.JDialog {

    public DialogAcCa(java.awt.Frame parent, boolean modal, String preg) {
        super(parent, modal);
        initComponents();
        setLocationRelativeTo(null);
        this.lblPregunta.setText(preg);
        this.setVisible(true);
        this.setAlwaysOnTop(true);
    }
    public boolean getResponse(){
return this.acep;
}

    private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        acep=true;
        this.setVisible(false);
    }                                          

    private void btnCancActionPerformed(java.awt.event.ActionEvent evt) {                                        
        this.setVisible(false);
    }                                       

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                DialogAcCa dialog = new DialogAcCa(new javax.swing.JFrame(), true,"Error");
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }
    private boolean acep = false; //Nuestro Atributo para saber si se acepta o no.
}

Espero esto les sirva de ayuda...

miércoles, 9 de febrero de 2011

Cambio de formas de botones, usando Substance Look And Feel.

Ahora veremos como cambiar la forma de un botón con el uso de la librería substance, la misma que nos permite darle un estilo de redondeado como las siguientes:

Este es un botón swing normal:

Ahora un botón normal aplicando substance(esta seleccionado):

Esto se logra al aplicar la substance a nuestra ventana, como lo vimos aquí, el color depende del tema que se le aplique a nuestra interfaz.

Colocarle una forma al botón para redondear sus bordes..:

Para cambiar la forma de un botón podemos modificarlo después del 
initComponents()..:



public Ventana() {
        initComponents();
        this.btnNuevo.putClientProperty( SubstanceLookAndFeel.BUTTON_SHAPER_PROPERTY, new StandardButtonShaper());
}


Con esto conseguimos que un botón como el siguiente:

StandardButtonShaper()
O bien si lo hacemos con una altura y un ancho determinado, podremos obtener algo así: 
StandardButtonShaper()


Hacer un botón abierto redondeando sólo uno de sus lados:

Para modificar los botones de nuestra interfaz lo tenemos que hacer luego del initComponents() de nuestra ventana, es decir después de haber creado los botones, podemos modificar algunos controles, pero en este caso veremos sólo con los botones. Para ello modificamos la propiedad putClientProperty de cada botón Swing a modificar ejm:

public Ventana() { //Constructor de nuestra Ventana, la cual contiene los botones.
        initComponents();

        this.btnNuevo.putClientProperty( SubstanceLookAndFeel.BUTTON_SHAPER_PROPERTY, new StandardButtonShaper());
        this.btnNuevo.putClientProperty( SubstanceLookAndFeel.BUTTON_SIDE_PROPERTY, SubstanceConstants.Side.RIGHT);
        this.btnNuevo.putClientProperty( SubstanceLookAndFeel.BUTTON_OPEN_SIDE_PROPERTY, SubstanceConstants.Side.RIGHT);
}


Con este código nos resulta el botón:
Side.RIGHT
Así mismo cambiando el Side podremos obtener cualquiera de las siguientes formas en los botones:
Side.LEFT

Side.TOP

Side.BOTTOM

Nota-Recomendación: He notado que si no tenemos un texto en el botón, este no toma la forma deseada, es decir: si tengo la propiedad text del botón vacía, no se aplican las formas a los botones como lo vimos en la parte superior, para ello lo que hice fué colocar un espacio vacío en la propiedad text(" ") y funcionó correctamente.

Espero les sirva de ayuda...