java swing JTextField集占位符

java swing JTextField集占位符,java,swing,jtextfield,placeholder,Java,Swing,Jtextfield,Placeholder,我创建了一个JTextField,现在我想在这个JTextField上设置占位符 我不知道如何在JTextField上设置占位符? 请帮助如何在JTextField上设置占位符文本 JTextField database=new JTextField("Enter Data Base Name"); database.setPreferredSize(database.getPreferredSize()); database.setText(""); 这是我的代码到文本字段,现在在代码中我要

我创建了一个JTextField,现在我想在这个JTextField上设置占位符 我不知道如何在JTextField上设置占位符? 请帮助如何在JTextField上设置占位符文本

JTextField database=new JTextField("Enter Data Base Name");
database.setPreferredSize(database.getPreferredSize());
database.setText("");
这是我的代码到文本字段,现在在代码中我要设置占位符
如何在JTextField上设置占位符如果我理解了这个问题,说明了一种方法。

试试这个类:

package playground;

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("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;
    }

}
那么简单的使用一个像这样的

JTextArea txtMSISDNList = new JTextArea();  
PromptSupport.setPrompt("01197585960,01197585961", txtMSISDNList);

在构造函数中:

searchText = new JTextField("Search");
searchText.setForeground(Color.GRAY);
searchText.addFocusListener(new FocusListener() {
    @Override
    public void focusGained(FocusEvent e) {
        if (searchText.getText().equals("Search")) {
            searchText.setText("");
            searchText.setForeground(Color.BLACK);
        }
    }
    @Override
    public void focusLost(FocusEvent e) {
        if (searchText.getText().isEmpty()) {
            searchText.setForeground(Color.GRAY);
            searchText.setText("Search");
        }
    }
    });

为了避免(可能是我的)遗漏,在JTextField为空的情况下,占位符是“请输入文本”或图标???占位符的确切含义是什么?也许这能帮到你?我自己写的组件。看这里:谢谢你的快速重播亲爱的谢谢你的快速重播亲爱的卡米克这是最简单的方式。非常感谢你的朋友。你是最受欢迎的朋友。你的链接已断开。您有更新吗?在这里下载jar文件:不幸的是,swingx不再处于开发阶段,因此使用风险自负(不确定它是否与Java8兼容)。重要提示:无论java2s.com看起来多么值得信赖,永远不要从原始主页以外的任何地方下载jar文件(否则你永远不知道里面有什么!)!您仍然可以使用jar(请参阅右侧的“下载”栏)。欢迎使用Stack Overflow!通过提供代码周围的上下文,这个答案可能会变得更加有用。当然,如果您键入文本“搜索”,然后单击该字段上的上一步,文本将消失。我喜欢这段代码,但文本只有在单击框后才可见,我之前也设置了文本以解决此问题。有更好的方法吗?我们只需要添加searchText.setText(“…”);在searchText=newjtextfield下(“搜索”);searchText.setForeground(颜色:灰色);
searchText = new JTextField("Search");
searchText.setForeground(Color.GRAY);
searchText.addFocusListener(new FocusListener() {
    @Override
    public void focusGained(FocusEvent e) {
        if (searchText.getText().equals("Search")) {
            searchText.setText("");
            searchText.setForeground(Color.BLACK);
        }
    }
    @Override
    public void focusLost(FocusEvent e) {
        if (searchText.getText().isEmpty()) {
            searchText.setForeground(Color.GRAY);
            searchText.setText("Search");
        }
    }
    });