0

こんにちは、CellTable があります。キーボードの Enter キーを押すか、マウスをクリックしたときに、セル内の要素を選択したいと考えています。

問題は、キーを押しても何も起こらないことです

これは、セルテーブルでキー入力機能を有効にする私のコードです

 CellTable<Value> table = new CellTable<Value>();

    public void onCellPreview(CellPreviewEvent<Value> event) {
                    if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) { // operation}

これは、マウスクリックの機能でもあります

.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
                        public void onSelectionChange(SelectionChangeEvent event) {

私の問題は、キーボードで「Enter」を押しても最初は実行されず、選択してからEnterを押すと実行されることです。

助けてください。

4

4 に答える 4

0

CellPreviewEvent は、セルで発生するイベントを提供します。セルを選択しない限り、セルは起動されません。そのため、Enter キーを押す前に、まずキーボード ナビゲーションまたはマウスでセルを選択する必要があります。

于 2013-01-17T05:12:10.197 に答える
0

1- 最初に keyboardSelectionPolicy を無効にしないでください。

2- このブロックをコンストラクターまたは onLoad メソッドに追加する必要があります。

table.addCellPreviewHandler(new CellPreviewEvent.Handler<GuiltyAccusationInfoDto>() {
@Override
public void onCellPreview(CellPreviewEvent<GuiltyAccusationInfoDto> event) {
    if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_UP || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_DOWN
            || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_LEFT || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_RIGHT
            || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_PAGEUP || event.getNativeEvent().getKeyCode() == KeyCodes.KEY_PAGEDOWN) {
        selectionModel.setSelected(listOfData.get(table.getKeyboardSelectedRow()), true);
    }
}});
于 2014-05-11T09:58:52.850 に答える
0

onBrowserEventの ID 列の を上書きしCellTable、ENTER が押されたかどうかを確認します。

    Column<T, Boolean> idCol = new Column<T, Boolean>(new CheckboxCell()) {
        @Override
        public Boolean getValue(T obj) {
            return selectionModel.isSelected(item);
        }

        @Override
        public void onBrowserEvent(Context context, Element elem, T object, NativeEvent event) {
            if (event.getKeyCode() == KeyCodes.KEY_ENTER) {
                selectionModel.setSelected(object, !selectionModel.isSelected(item));
                return;
            }
            super.onBrowserEvent(context, elem, object, event);
        }
    };
于 2013-01-21T11:20:44.783 に答える
0

それは十分に簡単です。

「Enter」を押すと、コンピューターでイベントが発生し、ブラウザーでも発生します。

イベントは「ACTIVE」要素に伝播されます。つまり、開いているブラウザーとコンソールがあり、アクティブなウィンドウ (フォーカスされたウィンドウ) が前面にある場合、「Enter」を押して cmd コンソールが行を変更しても、ブラウザーでは何も起こりません。

同じことが webApp でも発生します。何かにFOCUSがある場合にのみ、クリック/キー イベントで何かを行うことができます。

例: hotmail/gmail などの Web メールを開きます。ページ内の任意の場所 (テキスト ボックスではない) をクリックします。Enter キーを押します (何も起こりません)。テキストボックス (ユーザー名またはパスワード) 内をクリックします。Enter キーを押します。何かが起こることに注意してください。なんで?イベントを理解するオブジェクトがフォーカスされている (アクティブになっている) ためです。

ビューの読み込み時に発生させたい場合は、読み込み時にアイテムに明示的にフォーカスを設定できます (ただし、これでは目的が達成されません)。

于 2013-01-17T13:00:29.873 に答える