2013-01-02 11 views
7

Ho un JLabel che quando si fa clic su di esso è sostituito con un JTextField, ho bisogno di che lo JTextField per l'automaticità selezionare tutto il suo testo quando viene visualizzato.forzare JTextField per selezionare tutto il suo contenuto quando appare

Grazie per l'aiuto.

+0

È quello che stai cercando? http://stackoverflow.com/questions/1178312/how-to-select-all-text-in-a-formattedtextfield-when-it-gets-focus/1178596#1178596 – SomeJavaGuy

+0

Ho provato questo entrambi prima che facessi questa domanda, il problema con questa risposta è che non ha funzionato. anche l'altro problema con questa risposta è che il campo di testo diventa attivo solo dopo aver fatto clic sul testo e non quando appare –

+0

Vedere http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html su come mettere a fuoco un componente Swing –

risposta

8

Soluzione uno: farlo attraverso l'evento di messa a fuoco. Non è la soluzione migliore.

public static void main(final String[] args) { 
    // simple window preparation 
    final JFrame f = new JFrame(); 
    f.setBounds(200, 200, 400, 400); 
    f.setVisible(true); 

    { // this sleep part shall simulate a user doing some stuff 
     try { 
      Thread.sleep(2345); 
     } catch (final InterruptedException ignore) {} 
    } 

    { // here's the interesting part for you, this is what you put inside your button listener or whatever 
     final JTextField t = new JTextField("Hello World!"); 
     t.addFocusListener(new FocusListener() { 
      @Override public void focusLost(final FocusEvent pE) {} 
      @Override public void focusGained(final FocusEvent pE) { 
       t.selectAll(); 
      } 
     }); 
     f.add(t); 
     f.validate(); 

     t.requestFocus(); 
    } 
} 
+0

Grazie per la risposta, mi ha davvero aiutato –

+0

Qual è lo scopo di utilizzare Thread.sleep? Questo è normalmente considerato una cattiva pratica all'interno di un'applicazione Swing – MadProgrammer

+0

Questo era solo per far apparire il campo dopo un ritardo, invece di fare tutto questo clic-pulsante-nascondi-elemento-newelement-pop-sup-getsfocus-all-is-selected di cui stava parlando nella domanda originale. Ma modifico il mio post in modo che sia più chiaro. – JayC667

6

JTextField.selectAll() è quello che ti serve.

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class SelectAll 
{ 
    private int count = 0; 

    private void displayGUI() 
    { 
     JFrame frame = new JFrame("Select All"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

     final JPanel contentPane = new JPanel(); 
     JButton addButton = new JButton("Add"); 
     addButton.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent ae) 
      { 
       JTextField tfield = new JTextField(10); 
       tfield.setText("" + (++count));    
       contentPane.add(tfield); 
       tfield.requestFocusInWindow(); 
       tfield.selectAll(); 

       contentPane.revalidate(); 
       contentPane.repaint(); 
      } 
     }); 

     contentPane.add(addButton); 

     frame.setContentPane(contentPane); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 
    public static void main(String... args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       new SelectAll().displayGUI(); 
      } 
     }); 
    } 
} 
+0

Sembra che tu debba usare selectAll() insieme a [requestFocusInWindow()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#requestFocusInWindow()), per ottenere l'effetto desiderato. Come mostrato nella mia modifica. –

Problemi correlati