2016-03-24 8 views
1

habe ich habe eine Klasse implementiert Focuslistener, innerhalb der Klasse eine Menge JTextField bekam, ich will sie alle alle auswählen, wenn der Fokus gewonnen. Das ist meine focusGained() Funktion:JTextField alle Inhalte wählen, wenn der Fokus

@Override 
public void focusGained(FocusEvent fe) 
{ 
    JTextField txt = (JTextField)fe.getComponent(); 
    txt.selectAll(); 
} 

Ich versuche fe Komponente zu konvertieren dann selectAll(), aber es funktioniert nicht funktioniert. Irgendeine Idee dazu?

+0

txt.selectAll(); sollte in invokeLater eingewickelt werden - bis zum Ende der EDT verschoben, Grund ist, weil der Fokus asynchron ist, mit erheblicher Verzögerung – mKorbel

Antwort

2

Sie benötigen getSource()

((JTextField)fe.getSource()).selectAll(); 

ich persönlich die instanceoffe.getSource()

überprüfen würde verwenden
@Override 
public void focusGained(FocusEvent fe) { 
    if (!(fe.getSource() instanceof JTextField)) return; 
    JTextField txt = (JTextField)fe.getSource(); 
    txt.selectAll(); 
} 
0

Code sollte funktionieren, so nehme ich an der Hörer nicht an der JTextField registriert ist . Du musst etw tun. wie folgt (benachrichtigen Sie die addFocusListener-Methode):

public class MyClass implements FocusListener { 
    public JTextField createTextField() { 
    JTextField field = new JTextField(); 

    //add this class as a listener to the textfield 
    field.addFocusListener(this); 

    return field; 
    } 

    @Override 
    public void focusGained(FocusEvent fe) { 
    JTextField txt = (JTextField)fe.getComponent(); 
    txt.selectAll(); 
    } 

    @Override 
    public void focusLost(FocusEvent e) { 
    } 
}