2015-06-15 33 views
5

C'è un modo o un metodo in cui è possibile aggiungere segnaposto nel campo di testo j. Voglio aggiungere segnaposto "Inserisci il tuo numero" in campo, ma come posso fare questo. Controllo tutti i metodi ma non funziona.
Codice:Java: Aggiungi segnaposto su JTextField

public class Loop extends JFrame{ 

    private JTextField t1; 

     public L(){ 

     getContentPane().setLayout(null); 
     t1=new JTextField(); 
     t1.setBounds(27,50,47,28); 
     getContentPane().add(t1); 

     setSize(400,400); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setVisible(true); 

    } 

     } 

principale:

public class Main { 

    public static void main(String[] args) { 

     L object = new L(); 
    } 

    } 

risposta

1

Partenza Text Prompt per una soluzione flessibile.

È possibile controllare quando viene visualizzato il prompt (sempre, messa a fuoco acquisita o messa a fuoco persa). Puoi anche personalizzare lo stile del testo.

+0

potresti inserire il codice di TextPrompt segnaposto nel mio codice sopra sono bloccato a questo. –

+0

@TimAllen, la sua riga di codice per utilizzare 'TextPrompt' con le sue impostazioni predefinite. Non so come sei bloccato. Aggiorna il tuo mostrando ciò che hai provato e spiega cosa non funziona nel modo desiderato. – camickr

1

Questo codice dovrebbe funzionare, si ascolta il primo scatto e rimuove il testo

public class Loop extends JFrame{ 
    private JTextField t1; 
    private boolean clicked = false; 
    public L(){ 
     getContentPane().setLayout(null); 
     t1=new JTextField(); 
     t1.setText("Enter Your Number"); 
     t1.addMouseListener(new MouseAdapter(){ 
      @Override 
      public void mousePressed(MouseEvent e){ 
       if(!clicked){ 
        clicked=true; 
        t1.setText(""); 
       } 
      } 
     } 
     t1.setBounds(27,50,47,28); 
     getContentPane().add(t1); 
     setSize(400,400); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 
} 

Forse migliore soluzione esiste
Nota - non testato


MODIFICA (come i booleani clicked opere)
quando si chiama il metodo mousePressed(MouseEvent) alla prima volta, la variabile clicked è false, mediante dichiarazione:!

private boolean clicked = false; 

Così il corpo if viene eseguito (perché cliccato = false! = true)
nel corpo if, la variabile clicked è impostata su true, in modo if condizione sarà quindi falsa: (a causa cliccato = true = false)
!! Questo risolve il problema di eseguire il codice solo una volta.

+0

puoi dirmi in parole semplici come funziona booleano se condizione –

+0

if (true) {} o booleano p = true; if (p) {} o if (! p) {} – TinyOS

+1

Non utilizzare un layout nullo. Non è una soluzione completa Cosa succede se l'utente accede al campo di testo? Una GUI dovrebbe essere progettata per funzionare sia che l'utente usi un mouse o la tastiera. Cosa succede se l'utente fa clic sul campo e poi fa clic su un altro campo? Il testo viene rimosso ma mai sostituito. – camickr

2

Ecco un esempio di cui potete ispirarvi

package TinyOS; 
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("Here is a placeHolder!"); 
    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); 
} 
} 

Spero che può aiutare a