Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Añade un PlaceHolder a un JTextField

Añade un PlaceHolder a un JTextField

Autor jc mouse viernes, junio 19, 2015

PlaceHolder: PlaceHolder es un atributo propio de HTML5 y es el texto que aparece dentro de un campo de texto (un JTextField en el caso de java) antes de que se inserte un contenido. De esta manera se puede indicar al usuario qué tipo de contenido queremos que se inserte en ese campo, es decir es un tipo de ayuda al usuario.

html5 bolivia

Podemos emular esta propiedad de HTML5 en el componente JTextField de java sobre-escribiendo el método paintComponent para que muestre el PlaceHolder cuando el swing este vació y que oculte el texto de ayuda una vez que el usuario comience a escribir en el.

Entonces nuestra nueva clase JCTextField que se extiende de JTextField quedaría de la siguiente forma:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

/**
 * @web http://www.jc-mouse.net/
 * @author Mouse
 */
public class JCTextField extends JTextField{

    private Dimension d = new Dimension(200,32);
    private String placeholder = "";
    private Color phColor= new Color(0,0,0);
    private boolean band = true;

    /** Constructor de clase */
    public JCTextField()
    {
        super();
        setSize(d);
        setPreferredSize(d);
        setVisible(true);
        setMargin( new Insets(3,6,3,6));
        //atento a cambios 
        getDocument().addDocumentListener(new DocumentListener() {

            @Override
            public void removeUpdate(DocumentEvent e) {
                band = (getText().length()>0) ? false:true ;
            }

            @Override
            public void insertUpdate(DocumentEvent e) {
                band = false;
            }

            @Override
            public void changedUpdate(DocumentEvent de) {}

        });
    }

    public void setPlaceholder(String placeholder)
    {
        this.placeholder=placeholder;
    }

    public String getPlaceholder()
    {
        return placeholder;
    }

    public Color getPhColor() {
        return phColor;
    }

    public void setPhColor(Color phColor) {
        this.phColor = phColor;
    }    

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        //color de placeholder 
        g.setColor( new Color(phColor.getRed(),phColor.getGreen(),phColor.getBlue(),90));
        //dibuja texto
        g.drawString((band)?placeholder:"",
                     getMargin().left,
                     (getSize().height)/2 + getFont().getSize()/2 );
      }

}//JCTextField:end

Implementamos el swing en un JFrame de la siguiente forma:

//default
JCTextField jCTextField1 = new JCTextField();
jCTextField1.setLocation(40, 40);
jCTextField1.setPlaceholder("Escribe tu E-Mail");
add(jCTextField1);

//Custom
JCTextField jCTextField2 = new JCTextField();
jCTextField2.setLocation(40, 100);
jCTextField2.setPlaceholder("First Name please");
jCTextField2.setSize( new Dimension(300,56));
jCTextField2.setPhColor( new Color(72,117,210) );
jCTextField2.setFont( new Font("SansSerif",Font.PLAIN, 18) );
add(jCTextField2);

y tenemos:

placeholder java

Descargar el código fuente

enjoy!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Decompilar archivos APK

Decompilar archivos APK

Las aplicaciones para celulares inteligentes con sistema operativo Android, se distribuyen en archivos *.APK, si como pr...

Guardar reporte PDF directamente con Jasperreports

Guardar reporte PDF directamente con Jasperreports

Guardar un reporte PDF creado en iReport no es tan diferente de solo visualizarlo en pantalla. En este ejemplo se hace u...

Transacciones – Uso de Commit y Rollback

Transacciones – Uso de Commit y Rollback

Cuando desarrollamos aplicaciones en java con base de datos debemos tener cuidado en que se cumplan un conjunto de carac...

Uso de Tile Map en LibGDX

Uso de Tile Map en LibGDX

En esta ocasión vemos un ejemplo sencillo de como usar Tile Map en nuestros juegos android con la librería LibGDX utiliz...

Crear ventana de ayuda sin JavaHelp

Crear ventana de ayuda sin JavaHelp

Java Help es (o era) una librería para java que permitía añadir ventanas de ayuda HTML a nuestros proyectos, al ser una...

Leer y Escribir registros en archivo de texto

Leer y Escribir registros en archivo de texto

A veces se necesita utilizar archivos de texto plano como contenedor de registros como si de una base de datos se tratar...

16 comentarios en “Añade un PlaceHolder a un JTextField”

  1. Roger dice:

    utilize la libreria swingX para el placehoder pero no encuentro el jxtextfield para password, queria saber si se puede aplicar placehoder a un jPasswordField y si hay un jPasswordField para swingX y aplicar placeholder a este

    1. Mouse dice:

      No hice la prueba pero yo creo que si se puede, solo estamos reescribiendo el fondo del swing sin tocar nada de codigo 🙂

  2. Diego dice:

    Si haces lo mismo con un jCombobox editable y que cargue los item desde una base de datos te doy un beso.

    1. Mouse dice:

      o.O en un jcombo no veo necesario un placeholder otra buena opción podría ser un tooltip 🙂

  3. Aldomar dice:

    Disculpa por lo de anterior alli va me consulta…porque la clase no me funciona cuando lo copio a otro proyecto? me dice que no lo encuentra los componentes de la clase, espero que me responda… gracias

  4. Aldomar dice:

    porque la clase no me funciona cuando lo copio a otro proyecto? me dice que no lo encuentra los componentes de la clase, espero que me responda… gracias

    1. Mouse dice:

      fíjate que los imports sean correctos, eso cambiara según la estructura de tu proyecto

  5. PERCY dice:

    Estimado amigo, descargue tu codigo ejecuta bien, pero no velo los campos en Frm, solo cuando ejecuta. quiero saber como aplicarlo a mis txtnombre.getText();

    1. Mouse dice:

      Es que lo estamos compilando y arrastrando a la vez desde el diseñador de netbeans 🙂 tu puedes añadirlo por código 🙂

      1. LUchito dice:

        no entender.
        podrias explicarme mejor o un ejemplo.

  6. Carlos dice:

    Hola, si quisiera implementarlo para un passwordfield, es decir que al ingresar la contraseña no aparezca los datos que ingreso sino un “******” , pero que en el caso de borrar el contenido de esa caja de texto se vuelva a visualizar “ingrese contraseña”, de que forma podria obtener esto? gracias de antemano

    1. Mouse dice:

      el procedimiento es el mismo

  7. Jonathan dice:

    Si yo quisiera que el placeholder me apareciera al centro que tendria que hacer?

    1. Mouse dice:

      tendrías que calcular el ancho del texto y realiza algunos calculos para centrar en el textfield, es decir coordenada X para pintar el texto seria, ancho texfield / 2 – ancho texto / 2

  8. Relei dice:

    ¿Cómo podría implementar eso en un Jtextfield que puse en la interfaz con solo arrastrarlo desde la paleta?

    1. Mouse dice:

      solo debes compilar la clase en una JAR y lo agregas a tu paleta y ya esta

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

Comparte lo que sabes

Categorias

Últimas entradas

Si quieres cambiar el nombre de tus atributos sin tener que reescribir código java por X o Y razón, GSON te permite reno...

Un JList nos permite almacenar objetos en una lista y mostrarlos gráficamente en una serie vertical en el cual el usuari...

El proyecto “Java Decompiler” tiene como objetivo desarrollar herramientas para descompilar y analizar byte...

En este post aprenderemos lo que es un JSON Web Token, como crear nuestro propio token de acceso y como usarlo en un Ser...

Android Bolivia

Bandera en Alto