Java - 如何为多个JTextField使用单个FocusListener?

时间:2015-01-23 22:23:17

标签: java swing

一些背景:我是一位经验丰富的C ++程序员,但我现在正在自学Java。

我有一个带有几个JTextFields的应用程序,我希望点击它时突出显示一个字段的内容。我知道我可以为每个编写一个简单的内联FocusAdapter,但是我想编写一个用于每个JTestField的addFocusListener的嵌套类。我发现以下代码有效:

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

...但是那个JTextComponent会让我感到麻烦。在C ++中,演员阵容不受欢迎,我不熟悉Java的最佳实践。

那么,这个解决方案是使用JTextComponent转换为“良好”的Java编码,还是有更好/更清晰的解决方案?

3 个答案:

答案 0 :(得分:4)

  

JTextComponent让我感到麻烦

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

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

但可能没有必要。

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

答案 1 :(得分:1)

测试arg0是否为JTextComponent

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

答案 2 :(得分:0)

只需创建一个所有侦听器都可以调用它的函数。