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();
}
}
}
一些背景:我是一个相当有经验的 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();
}
}
}