【问题标题】:JTextField select all content when focus gainedJTextField 在获得焦点时选择所有内容
【发布时间】:2023-04-04 12:34:01
【问题描述】:

我有一个类实现了FocusListener,类里面有很多JTextField,我希望在获得焦点时全部选择。这是我的focusGained() 函数:

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

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

【问题讨论】:

  • txt.selectAll();应该包装到 invokeLater - 移到 EDT 的末尾,原因是因为焦点是异步的,有很大的延迟

标签: java swing jtextfield focuslistener


【解决方案1】:

你需要使用getSource()

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

我会亲自检查instanceoffe.getSource()

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

【讨论】:

    【解决方案2】:

    您的代码应该可以工作,所以我假设侦听器未在 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) {
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-31
      • 1970-01-01
      • 2011-03-13
      • 2014-05-29
      • 2010-10-03
      • 2012-12-16
      • 2015-10-30
      • 1970-01-01
      • 2010-11-13
      相关资源
      最近更新 更多