2013-01-02 20 views
7

Mam JLabel, że po kliknięciu na nią zastąpiony przez , potrzebuję, aby JTextField do automatyczności wybrać cały tekst, gdy się pojawi.Wymuś JTextField, aby wybrać całą zawartość, gdy pojawi się

Dziękuję za pomoc.

+0

Czy tego szukasz? http://stackoverflow.com/questions/1178312/how-to-select-all-text-in-a-jformattedtextfield-when-it-gets-focus/1178596#1178596 – SomeJavaGuy

+0

Próbowałem tego, zanim zadałem to pytanie, Problem z tą odpowiedzią polega na tym, że nie działa. także innym problemem z tą odpowiedzią jest to, że pole tekstowe zaczyna skupiać się tylko po kliknięciu na ten tekst, a nie kiedy pojawia się –

+0

Zobacz http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html o tym, jak skupić się na komponencie Swing –

Odpowiedz

8

jedno rozwiązanie: czy to poprzez imprezy ostrości. To nie najlepsze rozwiązanie.

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

Dziękuję za odpowiedź, naprawdę mi pomógł –

+0

Jaki jest cel używania Thread.sleep? Zwykle jest to uważane za złą praktykę w aplikacji Swing. – MadProgrammer

+0

To tylko po to, by pole pojawiło się po opóźnieniu, zamiast robić to wszystko - przycisk-ukrywa-element-nowy-pop-sup-getsfocus-all-is-selected o czym mówił w pierwotnym pytaniu. Ale zmienię mój post, aby był jaśniejszy. – JayC667

6

JTextField.selectAll() jest tym, czego potrzebujesz.

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

Wygląda na to, że musisz użyć selectAll() w połączeniu z [requestFocusInWindow()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#requestFocusInWindow()), aby uzyskać pożądany efekt. Jak pokazano w mojej edycji. –

Powiązane problemy