Для справки, соответствующие vaadin forum topic about arrow navigation in grid. Кто-то даже разместил zip-файл с примером проекта.
Я просто попробовал это предложение, и, похоже, он работает, за исключением того, что теперь я получаю сообщения журнала «Игнорирование коннектора для несуществующего соединителя».
Решение включает в себя компиляцию собственного виджета, так что может быть больно настроить, если вы этого еще не сделали.
В пакете widgetset/клиента:
@Connect(GridExtension.class)
public class GridExtensionConnector extends AbstractExtensionConnector
{
@Override
protected void extend(ServerConnector target)
{
GridConnector gridConnector = (GridConnector) target;
final Grid<JsonObject> grid = gridConnector.getWidget();
grid.addDomHandler(new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event)
{
if(event.getNativeKeyCode() == 40)
{
selectFocused();
}
else if(event.getNativeKeyCode() == 38)
{
selectFocused();
}
}
}, KeyDownEvent.getType());
}
public static void selectFocused()
{
Timer timer = new Timer() {
@Override
public void run()
{
execClick();
}
};
timer.schedule(10);
}
public static native void execClick() /*-{
// only click if focused row is not already selected
if(!$wnd.$(".v-grid-body .v-grid-row-focused .v-grid-row-selected").length)
{
$wnd.$(".v-grid-body .v-grid-cell-focused").click();
}
}-*/;
}
Где-то еще:
@JavaScript({ "https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" })
public class GridExtension extends AbstractExtension
{
public void extend(Grid grid)
{
super.extend(grid);
}
}
И использование:
new GridExtension().extend(grid);
Обратите внимание, что это решение работает только для одной сетки в стр. В разделе форума vaadin также содержится предложение о том, как сделать эту работу для страниц с несколькими сетками на одной странице, но она не сразу компилируется для меня, поэтому я не включаю ее здесь.
Я так не считаю. Вы можете отключить свой сервер и заметить, что вы все же можете перемещаться по Grid с помощью клавиатуры - таким образом, эта функция работает на стороне клиента (javascript). – kukis
@kukis Я не понимаю вашего комментария. Я спрашиваю, есть ли способ сделать нажатие клавиши и сразу выбрать следующий ряд (без второго нажатия клавиши). –
По касательной ... ['InlineDateField'] (https://vaadin.com/api/com/vaadin/ui/InlineDateField.html) имеет аналогичное поведение с двумя клавишами. Справа-стрелка создает окно подсветки вокруг следующей даты в ежемесячном календаре. Чтобы на самом деле выбрать эту дату, вы должны сделать вторую комбинацию клавиш. Любопытная часть: второе нажатие клавиши - это клавиша RETURN, а не клавиша 'SPACE', используемая' Grid'. –