将多个文本字段添加到单个焦点侦听器
adding multiple textfields to a single focus listener
我正在尝试将多个文本字段添加到要执行的单个焦点侦听器中,目前我已经添加了一个文本字段,但我不知道如何向其中添加多个文本字段,
这样的事情怎么样?
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)
您仍然需要为所有 text-fields 添加一个焦点侦听器,以避免第一个 (JT_id
) 上的 clicking/focusing 将清除所有它们的情况clicking/focusing对其他人什么都不做。
或者,您知道,替代方案 - 为每个文本字段分配一个仅清除该字段的焦点监听器。
i think its way better than creating a focus listener for each textfield.
通常答案是:"it depends..."
但在你的情况下我会说:每个文本字段都应该有自己的监听器(实例)。
原因是您更改了文本字段的内容。
当您仅在一个 Listener 实例中执行此操作时,无论哪个文本字段受到影响,您都可以在事件发生时随时更改所有文本字段,或者最终得到需要新条目的 if
/else
级联如果您添加另一个文本字段。
我建议您为 Listener 创建一个命名的内部 class,给它一个文本字段作为参数:
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 相关的具有多个方法的接口都有带空方法的默认实现(java8 前 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("");
}
}
我正在尝试将多个文本字段添加到要执行的单个焦点侦听器中,目前我已经添加了一个文本字段,但我不知道如何向其中添加多个文本字段,
这样的事情怎么样?
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)
您仍然需要为所有 text-fields 添加一个焦点侦听器,以避免第一个 (JT_id
) 上的 clicking/focusing 将清除所有它们的情况clicking/focusing对其他人什么都不做。
或者,您知道,替代方案 - 为每个文本字段分配一个仅清除该字段的焦点监听器。
i think its way better than creating a focus listener for each textfield.
通常答案是:"it depends..."
但在你的情况下我会说:每个文本字段都应该有自己的监听器(实例)。
原因是您更改了文本字段的内容。
当您仅在一个 Listener 实例中执行此操作时,无论哪个文本字段受到影响,您都可以在事件发生时随时更改所有文本字段,或者最终得到需要新条目的 if
/else
级联如果您添加另一个文本字段。
我建议您为 Listener 创建一个命名的内部 class,给它一个文本字段作为参数:
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 相关的具有多个方法的接口都有带空方法的默认实现(java8 前 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("");
}
}