Dla porównania, odpowiadająca vaadin forum topic about arrow navigation in grid. Ktoś opublikował nawet plik ZIP z przykładowym projektem.
Po prostu wypróbowałem tę sugestię i wygląda na to, że działa, oprócz tego, że otrzymuję teraz komunikat "Ignorowanie żądania złącza dla nieistniejącego złącza".
Rozwiązanie polega na kompilowaniu własnego zestawu widgetów, więc może to być kłopotliwe w konfiguracji, jeśli jeszcze tego nie zrobiłeś.
W pakiecie widgetset/klienckim:
@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();
}
}-*/;
}
gdzieś indziej:
@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);
}
}
a użycie:
new GridExtension().extend(grid);
Zauważ, że to rozwiązanie działa tylko na jednym ruszcie za strona. Wątek forum vaadin zawiera także sugestię, jak to zrobić dla stron z wieloma siatkami na tej samej stronie, ale nie skompilował się od razu, więc nie uwzględniam go tutaj.
Nie sądzę. Możesz wyłączyć serwer i zauważyć, że nadal możesz poruszać się po Gridzie za pomocą klawiatury - dlatego ta funkcjonalność działa po stronie klienta (javascript). – kukis
@kukis Nie rozumiem Twojego komentarza. Pytam, czy istnieje sposób na naciśnięcie klawisza i natychmiast wybierz następny wiersz (bez drugiego naciśnięcia klawisza). –
Na stycznej ... ['InlineDateField'] (https://vaadin.com/api/com/vaadin/ui/InlineDateField.html) ma podobne zachowanie w dwóch naciśnięciach klawisza. Strzałka w prawo powoduje wyświetlenie pola podświetlenia wokół kolejnej daty w kalendarzu miesięcznym. Aby rzeczywiście wybrać tę datę, musisz wykonać drugie naciśnięcie klawisza. Ciekawostka: Drugie naciśnięcie klawisza to klawisz 'RETURN' zamiast klawisza' SPACE' używany przez 'Grid'. –