我正在尝试将多个文本字段添加到要执行的单个焦点侦听器中,目前我已添加了一个文本字段,但我无法弄清楚如何向其中添加多个文本字段,
答案 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。