将多个文本字段添加到单个焦点侦听器

时间:2017-01-14 13:43:41

标签: java actionlistener

我正在尝试将多个文本字段添加到要执行的单个焦点侦听器中,目前我已添加了一个文本字段,但我无法弄清楚如何向其中添加多个文本字段,

2 个答案:

答案 0 :(得分:2)

  

我认为它比为每个文本字段创建焦点监听器更好。

通常,anser是:"它取决于......"

但在你的情况下我说:每个文本字段都应该有自己的监听器(实例)。 原因是您更改了文本字段内容。 当您只在一个Listener实例中执行此操作时,您可以在事件发生时随时更改所有文本字段,而不管哪个文本字段受到影响,或者最终得到需要新条目的if / else级联如果你添加另一个文本字段。

我建议你为Listener创建一个命名的内部类,给它一个Textfield作为参数:

class MyTextFiledFocusListener implements FocusListener {
  private final JTextFiled textField;
  MyTextFiledFocusListener(JTextFiled textField){
    this.textField = textField;
    textField.addFocusListener(this);
  }
  public void focusGained(FocusEvent e) 
  {
    textField.setText("");
  }

  public void focusLost(FocusEvent e)
  {
    // nothing
  }
}

您发布的位更改为:

new MyTextFiledFocusListener(JT_id);

仅供记录:

很多与多个方法相关的Swing相关接口都有默认的空方法实现(默认方法的pre java8解决方案),FocusListener也是如此。这些默认实现通常称为*Adapter。因此,当您扩展FocusAdapter实施FocusListener时,您可以缩短代码:

class MyTextFiledFocusListener extends FocusAdapter {
  private final JTextFiled textField;
  MyTextFiledFocusListener(JTextFiled textField){
    this.textField = textField;
    textField.addFocusListener(this);
  }
  public void focusGained(FocusEvent e) 
  {
    textField.setText("");
  }
}

答案 1 :(得分:1)

这样的事情怎么样?

FocusListener clearFields = new FocusListener() {
public void focusGained(FocusEvent e) 
{
   JT_id.setText("");
   JT_name.setText("");
   JT_add.setText("");
   JT_cno.setText("");
   JT_email.setText("");
}

public void focusLost(FocusEvent e)
{
  // nothing
}
});

JT_id.addFocusListener(clearFields);
JT_name.addFocusListener(clearFields);
JT_add.addFocusListener(clearFields);
JT_cno.addFocusListener(clearFields);
JT_email.addFocusListener(clearFields)

您仍然需要为所有文本字段添加焦点侦听器,以避免点击/聚焦第一个(JT_id)同时点击/关注其他字段时清除所有这些字段的情况什么都不做

或者,你知道,替代方案 - 为每个文本字段分配一个只清除该字段的focuslistener。