Ajuda com Placeholder?

Eu estou desenvolvendo um sistema e quero fazer com que alguns campos com texto pré digitados funcionem como um placeholder eu consegui fazer diretamente no View do projeto assim:

private void txtNumeroLogClienteFocusGained(java.awt.event.FocusEvent evt) {
	if(txtNumeroLogCliente.getText().equals("Insira o número.....")){
		txtNumeroLogCliente.setText("");
	}
}

private void txtNumeroLogClienteFocusLost(java.awt.event.FocusEvent evt) {
	if(txtNumeroLogCliente.getText().equals("")){
		txtNumeroLogCliente.setText("Insira o número.....");
	}
}      

O problema é que eu quero fazer isso a partir do controller, porém eu vários campos que recebem texto pré definido e eu queria uma função só que funcionasse para todos. E com isso eu quero perguntar se existe em Java alguma forma de fazer a mesma coisa mas sem definir de onde exatamente pegar?

Eu pensei em algo do tipo: Verificar se o elemento que chamou a função tem texto, se sim vazio.

Não pode utilizar um recurso para outro como e fazer isso funcionar. Não dá para fazer isso ou eu não entendi a sua realidade.

  • Placeholder é uma coisa e
  • Texto Padrão (pre digitados) é outra coisa,

se existir o texto padrão automaticamente não mostra o Placeholder e é assim que é para funcionar (vice versa)

1 curtida

Por exemplo o campo quando o programa inicia já vem com um texto digitado tipo:
Insira Seu Nome.
Ai quando o usuário clica o texto some pra ele poder digitar o nome, ou a informação que precisar.
O que eu quero é criar uma função dessa pra retirar o texto sem ser no meu view porque quero deixar o máximo possível no padrão MVC.
por isso eu quero no controller criar uma função chamada “Limpa texto” ou algo assim pra quando o usuário seleciona o Jtextfield em questão o programa setar Vazio nele. Mas como tenho vários campos assim quero saber se existe um jeito de fazer uma função unica para todos, pois a forma que eu sei que daria certo teria que fazer varias funções.

Acho que agora esta melhor explicado

O Placeholder faz isso amigo não precisa programar!

é Java Web?

Eu acredito que no Java SE não tem o placeholder.

Dá uma olhada aqui:

Não é java de computador mesmo

Então eu busquei por dias e não achei nada por isso que eu criei essa função que eu quero jogar no controller agora

Java SE, é Java Desktop, como vc disse Java de Computador.

Vc viu o site que eu mandei? Fala sobre o assunto.

Outra coisa que vc pode fazer é colocar um texto no campo, e na hora que o campo ganhar foco, vc limpa o texto. Isso é um PlaceHolder

vi sim porém o código de lá é muito grande eu vou fazer isso do foco mesmo

import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.text.Document;

public class PlaceholderTextField extends JTextField {
    private static final long serialVersionUID = 1L;

    public static void main(final String[] args) {
        final PlaceholderTextField tf = new PlaceholderTextField("");
        tf.setColumns(20);
        tf.setPlaceholder("All your base are belong to us!");
        final Font f = tf.getFont();
        tf.setFont(new Font(f.getName(), f.getStyle(), 30));
        JOptionPane.showMessageDialog(null, tf);
    }

    private String placeholder;

    public PlaceholderTextField() {
    }

    public PlaceholderTextField(final Document pDoc, final String pText, final int pColumns) {
        super(pDoc, pText, pColumns);
    }

    public PlaceholderTextField(final int pColumns) {
        super(pColumns);
    }

    public PlaceholderTextField(final String pText) {
        super(pText);
    }

    public PlaceholderTextField(final String pText, final int pColumns) {
        super(pText, pColumns);
    }

    public String getPlaceholder() {
        return placeholder;
    }

    @Override
    protected void paintComponent(final Graphics pG) {
        super.paintComponent(pG);

        if (placeholder == null || placeholder.length() == 0 || getText().length() > 0) {
            return;
        }

        final Graphics2D g = (Graphics2D) pG;
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g.setColor(getDisabledTextColor());
        g.drawString(placeholder, getInsets().left, pG.getFontMetrics().getMaxAscent() + getInsets().top);
    }

    public void setPlaceholder(final String s) {
        placeholder = s;
    }

}

Usando

PlaceholderTextField txtLogin = new PlaceholderTextField();
txtLogin.setPlaceholder("login do usuário");
3 curtidas