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

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

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


...但是JTextComponent演员让我有些麻烦。在C ++中,强制转换不受欢迎,而且我对Java的最佳实践不熟悉。

那么,这种将JTextComponent强制转换为“好的” Java编码的解决方案,还是有更好/更干净的解决方案?

最佳答案

JTextComponent演员让我有些麻烦


只要您注意仅将FocusListener添加到JTextComponents(例如JTextFields),就可以做到这一点。如果您要格外小心,可以随时执行checkof实例,

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


但可能没有必要。

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

08-06 14:58