そのため、クリック イベント選択モデルが正常に機能するセル テーブルがあります。後で、上矢印と下矢印を押して強調表示された行を変更できることを知りましたが、実際に SelectionChangeEvent を呼び出すには Space を押す必要があります。UP および DOWN イベントをキャッチし、SPACE イベントを発生させることで、少しごまかそうとしています。悲しいことに、それは機能しません:(これが私のコードです。
table.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);
table.sinkEvents(Event.KEYUP);
table.sinkEvents(Event.KEYDOWN);
table.sinkEvents(32);
table.addHandler(new KeyUpHandler(){
@Override
public void onKeyUp(KeyUpEvent event)
{
System.out.println(event.getNativeKeyCode());
if(event.getNativeEvent().getKeyCode() == 40)
{
// down is pressed
int i = rows.getFilterList().indexOf(selectionModel.getLastSelectedObject())+1;
if(i >= 0 && i < rows.getFilterList().size())
{
// selectionModel.setSelected(selectionModel.getLastSelectedObject(), false);
// selectionModel.setSelected(rows.getFilterList().get(i), true);
// SelectionChangeEvent.fire(selectionModel);
System.out.println("firing native event space");
DomEvent.fireNativeEvent(Document.get().createKeyUpEvent(false, false, false, false, 32), table);
}
}
else if(event.getNativeEvent().getKeyCode() == 38)
{
// up is pressed
int i = rows.getFilterList().indexOf(selectionModel.getLastSelectedObject())-1;
if(i >= 0 && i < rows.getFilterList().size())
{
// selectionModel.setSelected(selectionModel.getLastSelectedObject(), false);
// selectionModel.setSelected(rows.getFilterList().get(i), true);
// SelectionChangeEvent.fire(selectionModel);
System.out.println("firing native event space");
DomEvent.fireNativeEvent(Document.get().createKeyUpEvent(false, false, false, false, 32), table);
}
}
}
}, KeyUpEvent.getType());
32 はおそらくスペースの NativeEvent であり、私のコンソールは次のように出力します。
40
firing native event space
32
そのため、イベント タイプ 32 がオブジェクト テーブルに対して呼び出されていると仮定します。
オブジェクトが選択されているかどうかを確認します。画面の右側には、セル テーブルにすべての情報が表示されていないため、リストから追加情報が引き出されているためです。UP と DOWN を押すと RHS 情報が変更され、SPACE を押して情報の変更を促す必要がなくなります。