Java JTextField获得焦点时选择所有内容

Java JTextField获得焦点时选择所有内容,java,swing,jtextfield,focuslistener,Java,Swing,Jtextfield,Focuslistener,我有一个类实现了FocusListener,类内有很多JTextField,我希望它们在获得焦点时都选择all。这是我的focusgound()函数: @Override public void focusGained(FocusEvent fe) { JTextField txt = (JTextField)fe.getComponent(); txt.selectAll(); } 我尝试将fe转换为组件,然后selectAll(),但它不起作用。对此有什么想法吗?您需要使用

我有一个类实现了FocusListener,类内有很多JTextField,我希望它们在获得焦点时都选择all。这是我的
focusgound()
函数:

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

我尝试将
fe
转换为组件,然后
selectAll()
,但它不起作用。对此有什么想法吗?

您需要使用
getSource()


我会亲自检查fe.getSource()的
实例


您的代码应该可以工作,因此我假设侦听器没有在JTextField中注册。您必须这样做(通知addFocusListener方法):

txt.selectAll();应该包装到invokeLater中-移动到EDT的末尾,原因是焦点是异步的,具有显著的延迟
((JTextField)fe.getSource()).selectAll();
@Override
public void focusGained(FocusEvent fe) {
    if (!(fe.getSource() instanceof JTextField)) return;
    JTextField txt = (JTextField)fe.getSource();
    txt.selectAll();
}
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) {
  }
}