该方法很简单,所以我想不出一种方法来进一步简化它们。你可以做的,但是,通过声明一个 FocusListener实例,然后使用addFocusListener(...)
到全部文本字段来防止代码重复。
这将是这个样子:
// Instantiate a FocusListener ONCE
java.awt.event.FocusListener myFocusListener = new java.awt.event.FocusListener() {
public void focusGained(java.awt.event.FocusEvent focusEvent) {
try {
JTextField src = (JTextField)focusEvent.getSource();
if (src.getText().equals("Text here!") {
src.setText("");
}
} catch (ClassCastException ignored) {
/* I only listen to JTextFields */
}
}
public void focusLost(java.awt.event.FocusEvent focusEvent) {
try {
JTextField src = (JTextField)focusEvent.getSource();
if (src.getText().equals("") {
src.setText("Text here!");
}
} catch (ClassCastException ignored) {
/* I only listen to JTextFields */
}
}
};
(你可以,如果你是绝对确保事件的源将始终是一个JTextField省略try-catch
块,但它始终是一个坏实践依靠这样的假设)
然后,对于每一个JTextField中你只需要添加相同的FocusListener:
...
someTextField.addFocusListener(myFocusListener);
...
(这只是半年线 - 很难获得比这更短)
另一种方法是子类的JTextField,在构造函数中添加的FocusListener,但我看不出有什么好处通过第一个解决方案(除非你想要一个更灵活/强大的解决方案,例如每个JTextField的不同文本等)。
编辑您的问题以更好地解释它 – pinkpanther
如何?我是新来的问。谢谢。 – bentinata
如果您对所有18个文本字段都做同样的事情(事件明智),您可以对每个文本字段使用相同的事件处理程序 – Timr