2013-04-25 72 views
14

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

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

这是我的代码的文本字段现在的代码我想设置占位符 如何设置一个占位符上的JTextField

+1

避免(我的可能)missinterpetations占位符是“请输入文本”或图标在JTextField为空的情况下? – mKorbel 2013-04-25 11:51:47

+0

你是什么意思由占位符?也许这[回答](http://stackoverflow.com/a/10507193/928711)可以帮助你? – 2013-04-25 12:05:12

回答

19

试试这个类:

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.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; 
    } 

} 
+0

感谢您的快速回复亲爱的 – 2013-04-26 11:05:15

+0

您真棒! – raghavsood33 2017-02-20 12:59:26

8

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

+0

感谢您的快速回放亲爱的好友 – 2013-04-26 11:05:35

6

这么简单使用swingx jar那么这样

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

这样一个最简单的方法。非常感谢朋友。 – Karthikeyan 2016-03-18 09:37:50

+0

你是最受欢迎的朋友。 – 2016-03-20 13:30:32

+0

您的链接已损坏。你有更新吗? – wanderer0810 2018-01-29 15:23:55

9
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"); 
     } 
    } 
    }); 
+1

欢迎来到堆栈溢出!通过提供围绕代码的上下文,这个答案可能变得更加有用。 – 2016-11-09 21:25:39