Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/04/2012, 06:43
Avatar de ArcNexus
ArcNexus
 
Fecha de Ingreso: abril-2012
Ubicación: Donde uno se da cuenta de que no sabe nada
Mensajes: 69
Antigüedad: 12 años, 8 meses
Puntos: 4
No consigo seleccionar todo el texto en un jTextField

Hola Comunidad.

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;
    }
__________________
Cuando compartimos, todos ganamos y crecemos.
mi blog:http://milinuxblog.informatica-intelligent.com
(Linux, Java y software libre)