Per riferimento, corrispondente vaadin forum topic about arrow navigation in grid. Qualcuno ha persino pubblicato un file zip con un progetto di esempio.
Ho appena provato questo suggerimento, e sembra funzionare, tranne che ora ricevo messaggi di log "Ignora connettore di richiesta per connettore inesistente".
La soluzione prevede la compilazione del proprio widgetset, in modo che possa essere un problema impostare se non lo si è già fatto.
Nel pacchetto widgetset/cliente:
@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();
}
}-*/;
}
Da qualche altra parte:
@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);
}
}
E l'utilizzo:
new GridExtension().extend(grid);
Si noti che questa soluzione funziona solo per una rete unica per pagina. Il thread del forum di vaadin contiene anche un suggerimento su come fare in modo che funzioni per pagine con più griglie sulla stessa pagina, ma non è stato compilato immediatamente per me quindi non lo includerò qui.
Io non la penso così. Puoi spegnere il tuo server e notare che puoi ancora navigare attraverso Grid usando la tastiera - quindi questa funzionalità opera sul lato client (javascript). – kukis
@kukis Non capisco il tuo commento. Sto chiedendo se c'è un modo per fare un tasto e selezionare immediatamente la riga successiva (senza un secondo tasto). –
Su una tangente ... Il ['InlineDateField'] (https://vaadin.com/api/com/vaadin/ui/InlineDateField.html) ha un comportamento simile a due tasti. Freccia destra produce una casella di evidenziazione intorno alla data successiva nel calendario mensile. Per selezionare effettivamente quella data, è necessario eseguire una seconda sequenza di tasti. La parte curiosa: il secondo tasto è una chiave 'RETURN' piuttosto che la chiave' SPACE' usata da 'Grid'. –