java swing JTextField设置PlaceHolder [重复]

Posted

技术标签:

【中文标题】java swing JTextField设置PlaceHolder [重复]【英文标题】:java swing JTextField set PlaceHolder [duplicate] 【发布时间】:2013-04-19 07:02:51 【问题描述】:

我创建了一个 JTextField,现在我想在该 JTextField 上设置占位符,但我不知道怎么做?请帮忙。这是我的代码:

JTextField database=new JTextField("Enter Data Base Name");
database.setPreferredSize(database.getPreferredSize());
database.setText("");

【问题讨论】:

为了避免(我可能)误解占位符是“请输入文本”或图标在 JTextField 为空的情况下??? 占位符到底是什么意思?也许这个answer可以帮助你? 我编写了自己的组件。见这里:github.com/CollinAlpert/APIs/blob/master/javax/swing/… 【参考方案1】:

试试这个课程:

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;
    


【讨论】:

感谢您快速重播亲爱的 我发现占位符文本的呈现看起来不太理想。基于this SO answer about text rendering,我添加了静态字段:private static Map<?, ?> hints = (Map<?, ?>) Toolkit.getDefaultToolkit().getDesktopProperty("awt.font.desktophints"); 然后将设置渲染提示的行更改为if (hints != null) g.setRenderingHints(hints); else // set them directly as shown in the answer【参考方案2】:
JTextField searchText;

...

在构造函数中:

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");
        
    
    );

【讨论】:

欢迎来到 Stack Overflow!通过提供一些围绕您的代码的上下文,这个答案可以变得更加有用。 当然,如果您输入文本“搜索”,然后单击返回该文本将消失的字段。 我喜欢这段代码,但文本只有在单击框后才可见,我之前也设置了文本来解决这个问题。有没有更好的办法? 我们只需要添加 searchText.setText("...");在 searchText = new JTextField("Search"); searchText.setForeground(Color.GRAY);【参考方案3】:

使用swingx jar 就这么简单

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

【讨论】:

这么简单的方法。非常感谢朋友。 你是最受欢迎的朋友。 您的链接已损坏。你有更新吗? 在这里下载jar文件:java2s.com/Code/Jar/s/Downloadswingx161jar.htm 不幸的是,swingx 不再处于开发阶段,因此使用风险自负(不确定它是否与 Java 8 兼容)。重要提示:无论 java2s.com 看起来多么值得信赖,永远不要从原始主页以外的任何地方下载 jar 文件(否则你永远不知道里面有什么!)!您仍然可以通过maven 获取jar(参见右侧的“下载”列)。【参考方案4】:

如果我理解了这个问题,Text Prompt 会显示您可以做到这一点的一种方法。

【讨论】:

感谢亲爱的camickr快速重播

以上是关于java swing JTextField设置PlaceHolder [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将文件路径拖放到 Java Swing JTextField

java:限制swing中的JTextField只能输入中文,字母,数字。

java.swing JtextField 中怎么限制只能输入数字

Java Swing:JTextField 没有按预期失去焦点

如何设置Java里面textfield的对齐方式

Java Swing JtextField 插图