Als Referenz der entsprechende vaadin forum topic about arrow navigation in grid. Jemand hat sogar eine Zip-Datei mit einem Beispielprojekt gepostet.
Ich habe gerade diesen Vorschlag ausprobiert, und es scheint zu funktionieren, außer dass ich jetzt "Log-Nachrichten ignorieren Connector Anfrage für nicht existierende Connector" bekomme.
Die Lösung besteht darin, ein eigenes Widgetset zu kompilieren, so dass es sehr mühsam sein kann, es einzurichten, wenn Sie dies noch nicht getan haben.
Im Widgetset/Client-Paket:
@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();
}
}-*/;
}
Irgendwo anders:
@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);
}
}
Und die Nutzung:
new GridExtension().extend(grid);
Beachten Sie, dass diese Lösung funktioniert nur für ein einzelnes Gitter pro Seite. Der vaadin Forum-Thread enthält auch einen Vorschlag, wie dies für Seiten mit mehreren Gittern auf der gleichen Seite funktioniert, aber es kompilierte nicht sofort für mich, also schließe ich es hier nicht ein.
Ich glaube nicht. Sie können Ihren Server herunterfahren und feststellen, dass Sie immer noch mit der Tastatur durch das Grid navigieren können - diese Funktionalität funktioniert also auf einer Client-Seite (Javascript). – kukis
@kukis Ich verstehe deinen Kommentar nicht. Ich frage, ob es eine Möglichkeit gibt, einen Tastendruck auszuführen und sofort die nächste Zeile auszuwählen (ohne einen zweiten Tastendruck). –
Auf einer Tangente ... Das ['InlineDateField'] (https://vaadin.com/api/com/vaadin/ui/InlineDateField.html) hat ein ähnliches Zwei-Tasten-Verhalten. Right-Arrow erzeugt ein Markierungsfeld um das nächste Datum im Monatskalender herum. Um das Datum tatsächlich auszuwählen, müssen Sie einen zweiten Tastendruck ausführen. Der kuriose Teil: Der zweite Tastendruck ist eine 'RETURN'-Taste anstelle der' SPACE'-Taste, die von 'Grid' verwendet wird. –