2016-03-24 1 views
1

У меня есть класс, который реализует FocusListener, внутри класса получилось много JTextField, я хочу, чтобы все они выбирали все, когда фокус получался. Это моя focusGained() функция:JTextField выбирает весь контент, когда фокус получен

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

Я пытаюсь преобразовать fe к компоненту затем selectAll(), но он не работает. Есть идеи об этом?

+0

txt.selectAll(); должен быть завернут в invokeLater - перемещен в конец EDT, причина в том, что Focus является асинхронным, со значительной задержкой – mKorbel

ответ

2

Вы должны использовать getSource()

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

Я Personnally проверить instanceoffe.getSource()

@Override 
public void focusGained(FocusEvent fe) { 
    if (!(fe.getSource() instanceof JTextField)) return; 
    JTextField txt = (JTextField)fe.getSource(); 
    txt.selectAll(); 
} 
0

Ваш код должен работать, поэтому я полагаю, что слушатель не зарегистрирован в JTextField , Вы должны сделать это. (уведомлять метод addFocusListener):

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) { 
    } 
} 
Смежные вопросы