Estoy creando una clase que hereda de JTextField. La idea es tener un campo con una propiedad Mensaje. (Vendría a ser algo parecido a Tooltiptext, pero dentro del propio control)
Mi intención y eso ya me lo hace bien es que al recibir el foco, si el valor del campo está vacío se llene con el String contenido dentro de la propiedad Mensaje. y que ese texto quede seleccionado para que cuando el usuario escriba el mensaje desaparezca. Todo me funciona bien menos que no me selecciona.
Estoy usando Substance como lookandFeel (lo digo por si eso puede influir)
Aquí os dejo el código de la clase, por si alguna alma caritativa me quiere echar un vistazo y ayudarme.
Gracias
Código:
package Controles; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JTextField; import javax.swing.border.LineBorder; /** * * @author ArcNexus */ public class jCampoTextoSimple extends JTextField { private String Mensaje = "mensaje para el control"; private String cTexto; public jCampoTextoSimple(){ // super(); setOpaque(false); //setBorder(new LineBorder(new Color(140,96,39), 1, false)); setPreferredSize(new Dimension(100,29)); this.setFont(new Font("Dejavu Sans", 0, 12)); this.setText("jCampoTextoSimple"); this.setForeground(new Color(83,59,35)); this.setBackground(new Color(255, 255, 255)); this.setSelectionColor(Color.ORANGE); this.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent e) { setBackground(new Color(243 ,232, 212)); setFont(new Font("DejavuSans", 1, 12)); //Compruebo texto del control, si es el mensaje del control lo //preparo con selectAll() para que se borre al pulsar una tecla cTexto = getText().trim(); if ("".equals(getText())) { setText(Mensaje); selectAll(); } else { System.out.println(getText()+ " "+ Mensaje); if (cTexto.equals(Mensaje)) { selectAll(); } else { select(0,0); } select(0,0); } } }); this.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { setBackground(new Color(255 ,255, 255)); setFont(new Font("Dejavu Sans",0,12)); if( "".equals(getText())){ setText(Mensaje); setForeground(new Color(217,198,180)); select(0, 0); } else setForeground(new Color (83,59,35)); } }); } public String getMensaje() { return Mensaje; } public void setMensaje(String Mensaje) { this.Mensaje = Mensaje; }