gpt4 book ai didi

java - 获得焦点和失去焦点 Java

转载 作者:行者123 更新时间:2023-11-30 07:16:29 27 4
gpt4 key购买 nike

我的表单上有一些文本字段。我喜欢 focusGained 和 focusLost 事件。使用 2 或 3 个文本字段执行此操作很容易。但是,在 18 个文本字段之后,有点困惑。有什么办法可以缩短 focusGained 和 focusLost 事件吗?示例:

txtSomeTextFocusGained(java.awt.event FocusEvent evt){
if(txtSomeText.getText().equals("Text here!"){
txtSomeText.setText("");
}
}

txtSomeTextFocusLost(java.awt.event FocusEvent evt){
if(txtSomeText.getText().equals(""){
txtSomeText.setText("Text here!");
}
}

那是一个文本字段,我在处理大约 18 个文本字段时遇到了问题。有什么办法可以简化吗?谢谢。

最佳答案

这些方法很简单,所以我想不出进一步简化它们的方法。不过,您可以做的是通过声明一个 FocusListener 实例来防止代码重复,然后使用addFocusListener(...) 将其添加到< strong>所有 文本字段。

它看起来像这样:

// 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 block ,但这始终是一种不好的做法依赖于这样的假设。)

然后,对于每个 JTextField,您只需要添加相同 FocusListener:

...
someTextField.addFocusListener(myFocusListener);
...

(只有半行 - 很难比这更短。)


另一种方法是子类化 JTextField,在构造函数中添加 FocusListener,但我看不出比第一种解决方案有任何优势(除非您想要更灵活/更强大的解决方案,例如每个 JTextField 的不同文本等)。

关于java - 获得焦点和失去焦点 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16947532/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com