Нечто подобное я делал для ввода серийных номеров и гарантийных сроков для гарантийных талонов с помощью сканера штрих-кода. Не могу сказать, что мое решение изящное, однако ничего другого я придумать не смог. Вот оно (у нас на гриде две контролки, в которых при нажатии Enter курсор переходит на следующую запись, назовем их Control1 и Control2):
1. Заводим переменную curControl для хранения номера текущей контролки.
2. Перекрываем методы mouseDown на нужных контролках следующим образом:
PHP код:
public int mouseDown(int _x, int _y, int _button, boolean _Ctrl, boolean _Shift)
{
int ret;
curControl = 1; //здесь сохраняем номер выбраноой контролки
ret = super(_x, _y, _button, _Ctrl, _Shift);
Return ret;
}
3. Для поля, которое в гриде стоит справа от нужного нам (если наша контролка самая правая, то для первого поля) перекрываем метод gotFocus вот так:
PHP код:
switch (curControl)
{
case 1 :
Control1.setFocus();
break;
case 2 :
Control2.setFocus();
break;
}
4. Для Control1 перекрываем gotFocus:
PHP код:
public void gotFocus()
{
super();
if (curControl == 2)
Control2.setFocus();
else
curControl = 1;
}
5. Зеркальным образом перекрываем gotFocus для Control2.
6. Перекрываем modified для Control1 и Control2:
PHP код:
public void modified()
{
super();
DataSource_ds.next();
}
Где DataSource - имя источника данных для контролок Control1 и Control2.
Единственное ограничение этого решения - то, что с Control1 и Control2 нельзя перейти Tab'ом.
P.S. Пока писал, понял, что более красиво можно было сделать тоже самое, если сохранять на номер комнтролки, а ссылку на нее.