一些背景:我是一位经验丰富的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编码,还是有更好/更清晰的解决方案?
答案 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)
只需创建一个所有侦听器都可以调用它的函数。