2013-04-25 21 views
14

Creo un JTextField e ora voglio impostare il segnaposto su quel JTextField non so come impostare il segnaposto su JTextField? Please Help Come impostare il testo segnaposto sulla JTextFieldjava swing JTextField set PlaceHolder

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

Questo è il mio codice di campo di testo attualmente in quel codice voglio impostare segnaposto come impostare un segnaposto su quel JTextField

+1

per evitare (il mio probabile) errore di missinterpetations il segnaposto è "inserire testo" o Icona nel caso in cui JTextField sia vuoto ??? – mKorbel

+0

Cosa intendi esattamente per segnaposto? Forse questa [risposta] (http://stackoverflow.com/a/10507193/928711) può aiutarti? –

risposta

19

Prova questa classe:

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

Grazie per un rapido replay caro –

+0

Sei fantastico! – raghavsood33

8

Se ho ben capito il domanda, Text Prompt mostra un modo in cui puoi farlo.

+0

Grazie per un rapido replay caro caminetto –

6

uso in modo semplice un swingx jar poi come questo

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

Un modo così semplice. Grazie mille amico. – Karthikeyan

+0

Sei un amico molto gradito. –

+0

Il tuo link è rotto. Hai un aggiornamento per questo? – wanderer0810

9
JTextField searchText; 

...

nel costruttore:

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

Benvenuti in Stack Overflow! Questa risposta può diventare molto più utile fornendo un certo contesto attorno al tuo codice. –