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

标签 java

我的表单上有一些文本字段。我喜欢 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(...) 将其添加到<强>所有文本字段。

它看起来像这样:

// 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/

相关文章:

java - 如何创建所有 Android 设备通用的相机 Action

java - 在java中使用Web服务时如何触发处理程序类

java - 如何检测变量何时更改值

java - 如何让这个 FlowLayout 包裹在它的 JSplitPane 中?

java - 创建不可变类时,集合是否应该只包含不可变对象(immutable对象)?

java - 实现类似的缺失一项特征

Java Selenium - 从 HandsonTable 获取数据

java - 一次执行多个 native 查询

Java 为什么局部变量不能隐藏而全局变量可以?

java - 仅使用多线程创建目录