2013-04-25 76 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