2013-04-25 44 views
14

Ich erstelle ein JTextField und jetzt möchte ich den Platzhalter auf diesem JTextField setzen Ich weiß nicht, wie Sie den Platzhalter auf dem JTextField setzen? Bitte Hilfe Wie Platzhalter Text auf JTextFieldJava Swing JTextField Set PlaceHolder

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

, dass mein Code jetzt will Platzhalter gesetzt i in diesem Code auf Textfeld festlegen, wie auf diesem JTextField

+1

zu vermeiden (mein wahrscheinlich) missinterpetations Platzhalter ist "bitte Text eingeben" oder Symbol für den Fall, dass JTextField leer ist ??? – mKorbel

+0

Was meinst du genau mit Platzhalter? Vielleicht kann diese [Antwort] (http://stackoverflow.com/a/10507193/928711) Ihnen helfen? –

Antwort

19

diese Klasse Versuchen:

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

Vielen Dank für eine schnelle Wiederholung lieber –

+0

Sie sind fantastisch! – raghavsood33

8

einen Platzhalter setzen Wenn ich das verstehen Frage, Text Prompt zeigt eine Möglichkeit, wie Sie dies tun können.

+0

Vielen Dank für eine schnelle Wiederholung lieber camickr –

6

So einfach Gebrauch ein swingx jar dann wie dieses

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

So ein einfacher Weg. Vielen Dank, mein Freund. – Karthikeyan

+0

Sie sind herzlich willkommen Freund. –

+0

Ihr Link ist kaputt. Hast du ein Update dafür? – wanderer0810

9
JTextField searchText; 

...

Im Konstruktor:

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

Willkommen bei Stack Overflow! Diese Antwort kann viel nützlicher werden, wenn Sie einen Kontext für Ihren Code bereitstellen. –