Я не думаю, что ваш код нуждается в каких-либо обобщениях; MyFocusListener
уже работает для всех JTextComponents
, не только JTextFields
, и не должно работать для любых других классов, так как он использует методы, объявленные в JTextComponent
. Вы уже можете использовать его в других приложениях.
Если вы все еще хотите, чтобы слушатель использовал дженерики (домашнее задание?), Используйте это:
class MyFocusListener<T extends JTextComponent> extends FocusAdapter {
public void focusGained(FocusEvent evt) {
final T c = (T)evt.getSource();
String s = c.getText();
c.requestFocus();
c.selectAll();
for (int i = 0; i < s.length(); i++) {
if (!Character.isDigit(s.charAt(i))) {
c.setSelectionStart(i);
c.setSelectionEnd(i);
break;
}
}
}
public void focusLost(FocusEvent evt) {
final T c = (T) evt.getSource();
String s = c.getText();
if (evt.isTemporary()) {
return;
}
for (int i = 0; i < s.length(); i++) {
if (!Character.isDigit(s.charAt(i))) {
c.requestFocus();
c.selectAll();
break;
}
}
}
}