2013-04-25 30 views
14

Tworzę JTextField, a teraz chcę ustawić symbol zastępczy na JTextField Nie wiem jak ustawić symbol zastępczy na JTextField? proszę o pomoc Jak ustawić tekst zastępczy na JTextFieldjava swing JTextField set PlaceHolder

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

To jest mój kod do pola tekstowego teraz w tym kodzie Chcę ustawić zastępczy jak ustawić zastępczy tego JTextField

+1

do uniknięcia (mój prawdopodobnie) symbol zastępczy missinterpets to "wprowadź tekst" lub ikona w przypadku, gdy JTextField jest pusty ??? – mKorbel

+0

Co masz dokładnie na myśli przez symbol zastępczy? Może ta [odpowiedź] (http://stackoverflow.com/a/10507193/928711) może ci pomóc? –

Odpowiedz

19

Spróbuj Klasa:

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

Dziękujemy za szybki powrót, drogi –

+0

Jesteś świetny! – raghavsood33

8

Jeśli Rozumiem pytanie, Text Prompt pokazuje jeden sposób, możesz to zrobić.

+0

Dziękujemy za szybką powtórkę, drogi camickr. –

6

tak proste wykorzystanie swingx jar wtedy jak ten

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

Taki najprostszy sposób. Wielkie dzięki. – Karthikeyan

+0

Jesteś najlepszym przyjacielem. –

+0

Twój link jest uszkodzony. Czy masz aktualizację? – wanderer0810

9
JTextField searchText; 

...

W konstruktorze:

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

Witamy w przepełnieniu stosu! Ta odpowiedź może stać się o wiele bardziej użyteczna dzięki zapewnieniu kontekstu kodu. –