Java: 在 JTextField 中添加占位符

Java: Add Place Holder on JTextField

有没有一种方法可以在 j 文本字段中添加占位符。我想在字段中添加占位符 "Enter Your Number" 但我该怎么做。我检查了所有方法,但没有用。
代码:

public class Loop extends JFrame{

    private JTextField t1;

        public L(){

        getContentPane().setLayout(null);
        t1=new JTextField();
        t1.setBounds(27,50,47,28);
        getContentPane().add(t1);

        setSize(400,400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);

    }

      }

主要:

public class Main {

    public static void main(String[] args) {

        L object = new L();
    }

    }

这段代码应该可以工作,它会在第一次点击时侦听并删除文本

public class Loop extends JFrame{
    private JTextField t1;
    private boolean clicked = false;
    public L(){
        getContentPane().setLayout(null);
        t1=new JTextField();
        t1.setText("Enter Your Number");
        t1.addMouseListener(new MouseAdapter(){
            @Override
            public void mousePressed(MouseEvent e){
                if(!clicked){
                    clicked=true;
                    t1.setText("");
                }
            }
        }
        t1.setBounds(27,50,47,28);
        getContentPane().add(t1);
        setSize(400,400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }
}

也许存在更好的解决方案
注意 - 未测试


EDIT(布尔值 clicked 的工作原理)
当你第一次调用方法 mousePressed(MouseEvent) 时,clicked 变量是 false,通过声明:

private boolean clicked = false;

因此 if 主体被执行(因为 !clicked = !false = true
if 正文中,clicked 变量设置为 true,因此 if 条件将为 false:(因为 !clicked = !true = false)
这解决了 运行 代码一次的问题。

这是一个你可以启发的例子

package TinyOS;
import java.awt.*;
import javax.swing.*;
import javax.swing.text.Document;

@SuppressWarnings("serial")
public class PlaceholderTextField extends JTextField {

public static void main(final String[] args) {
    final PlaceholderTextField tf = new PlaceholderTextField ("");
    tf.setColumns(20);
    tf.setPlaceholder("Here is a placeHolder!");
    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);
}
}

希望能帮到你

查看 Text Prompt 以获得灵活的解决方案。

您可以控制何时显示提示(总是,获得焦点或失去焦点)。您还可以自定义文字的样式。