2

テーブルのショートカットに問題があります。いくつかのキーをカスタマイズする必要があります: delete - 行を削除し、Enter でテーブルを編集可能/編集不可にし、上/下矢印でテーブルのモードを編集可能から編集不可に切り替えます。テーブルを透明なパネル内に配置し、Action.Handler を使用してキーボード イベントをキャッチします。しかし、私が TextField、TextArea、Combobox 内に書いているとき、私はイベントをこのコンポーネントに伝播したかった (TextField のテキストを削除するためにそれを使用して削除キーの無効化を処理し、上/下キーはキーボードで Combobox を開くことを許可しない)。handleAction() メソッドで target パラメーターを見ましたが、その使用方法がわかりません。置き換える代わりにショートカットを追加する方法を知ることも興味深い.

    // adding table inside Panel
    tablePanel = new Panel();
    tablePanel.setStyleName(Panel.STYLE_LIGHT);

    VerticalLayout tableElementsLayout = new VerticalLayout();
    tablePanel.setContent(tableElementsLayout);

    tablePanel.setSizeFull();
    tableElementsLayout.setSizeFull();
    vl.addComponent(tablePanel);
    vl.setExpandRatio(tablePanel, 1.0f);

    tableElementsLayout.add(table);

    // --- adding keyboard handler
    final Action actionDel = new ShortcutAction("Delete",
            ShortcutAction.KeyCode.DELETE, null);

    deleteHandler = new Action.Handler() {

        @Override
        public void handleAction(Action action, Object sender, Object target) {
            // I want handle events here when I'm not inside TextField
        }

        @Override
        public Action[] getActions(Object target, Object sender) {
            return new Action[] { actionDel };
        }
    };

    tablePanel.addActionHandler(deleteHandler);        

それを行う方法はありますか?

4

1 に答える 1

3

これがこれを達成するための最良の方法であるか、最も美しい方法であるかはわかりませんが、少なくとも機能します:

textField.addListener(new BlurListener() {
    @Override
    public void blur(BlurEvent event) {
        tablePanel.addActionHandler(deleteHandler);
    }
});

textField.addListener(new FocusListener() {
    @Override
    public void focus(FocusEvent event) {
        tablePanel.removeActionHandler(deleteHandler);
    }
});

これらのリスナーはdeleteHandler、ユーザーがフィールドに入るたびに無効にし、ユーザーがフィールドを離れるたびに有効にすることで、 を処理します。

于 2012-01-26T14:17:38.117 に答える