Java - 如何将单个 FocusListener 用于多个 JTextField?

Java - How do I use a single FocusListener for multiple JTextFields?

一些背景:我是一个相当有经验的 C++ 程序员,但我目前正在自学 Java。

我有一个包含多个 JTextField 的应用程序,我希望在单击某个字段时突出显示该字段的内容。我知道我可以为每个人编写一个简单的内联 FocusAdapter,但我想编写一个嵌套的 class 用于每个 JTestField 的 addFocusListener。我发现以下代码有效:

    private class textFieldFocusListener extends FocusAdapter {
    @Override
    public void focusGained(FocusEvent arg0) {
        ((JTextComponent) arg0.getComponent()).selectAll();
        }   
    }

...但是 JTextComponent 强制转换让我有点烦恼。在 C++ 中,转换是不受欢迎的,我不熟悉 Java 的最佳实践。

那么,这个解决方案是转换为 JTextComponent "good" Java 编码,还是有 better/cleaner 解决方案?

只需创建一个函数,您的所有听众都会调用它。

JTextComponent cast troubles me a little bit

这样做很好,只要您注意仅将 FocusListener 添加到 JTextComponents(例如 JTextFields)即可。如果您想格外小心,可以随时进行 instanceof 检查,

Component comp = e.getComponent();
if (!(e instanceof JTextComponent)) {
   return;
}

但可能没有必要。

也许更好:创建一个添加 FocusListener 并且只接受 JTextComponent 作为其参数的方法。

测试 arg0 是否是 JTextComponent

private class textFieldFocusListener extends FocusAdapter {
    @Override
    public void focusGained(FocusEvent arg0) {
        if (arg0 instanceOf JTextComponent) {
           ((JTextComponent) arg0.getComponent()).selectAll();
          }
        }   
    }