簡體   English   中英

如何在 Vaadin 中將 Keylistener 添加到 ListSelect?

[英]How to add Keylistener to ListSelect in Vaadin?

我有一個 vaadin ListSelect組件,如果使用DEL鍵,我想在該組件上刪除項目。

我發現的只是ShortcutListener但如果我添加以下偵聽器, DEL鍵在我的應用程序的其余部分不起作用(例如刪除TextField文本):

listSelect.addShortcutListener(new ShortcutListener("", KeyCode.DELETE, null) {
        private static final long serialVersionUID = 4703134138899283799L;

        @Override
        public void handleAction(Object sender, Object target) {
            // handle delete
        }
    });

我應該如何實現DEL鍵的偵聽器?

編輯:嘗試按照評論中的建議使用包裝Panel ,但它仍然不起作用。 這是我當前的代碼:

listSelect = new ListSelect(null);
listSelect.setWidth(100, Unit.PERCENTAGE);
listSelect.setHeight(82, Unit.PIXELS);
listSelect.setMultiSelect(true);
listSelect.setNullSelectionAllowed(false);

listSelect.setDescription("Löschen mit der DEL Taste");
listSelect.addShortcutListener(new ShortcutListener("", KeyCode.DELETE, null) {
    private static final long serialVersionUID = 4703134138899283799L;

    @Override
    public void handleAction(Object sender, Object target) {
        // handle delete
    }
});
Panel wrapperPanel = new Panel(listSelect);
form.addComponent(wrapperPanel);

form是一個GridLayoutform的父級是一個Panel 此面板是TabSheet一部分。 我正在使用 Vaadin 7.7.1 版。

查看源代碼(當前第 110 行) ,似乎該操作已委托給包含窗口...

 /** * Keeps track of the Actions added to this component; the actual * handling/notifying is delegated, usually to the containing window. */ private ConnectorActionManager actionManager;

... 或至少父容器,因為基於這個問題Select-all 快捷方式 (Ctrl-A) in Vaadin Table? 你可以解決這個問題。 如果您將列表選擇包裝在面板中並將快捷方式偵聽器添加到面板中,它會按預期工作:

public class MyListSelectComponent extends VerticalLayout {

    public MyListSelectComponent() {
        ListSelect list = new ListSelect("Press DEL to remove items");
        TextField input = new TextField("Focus this input and press DEL to delete some text");
        input.setValue("This is some very long text, or not...");

        for (int i = 0; i < 10; i++) {
            list.addItem(i);
        }

        Panel panel = new Panel(list);
        panel.addShortcutListener(new ShortcutListener("", ShortcutAction.KeyCode.DELETE, null) {
            @Override
            public void handleAction(Object sender, Object target) {
                if (list.getValue() != null) {
                    list.removeItem(list.getValue());
                }
            }
        });

        addComponent(panel);
        addComponent(input);
    }
}

實際輸出:

vaadin 刪除快捷鍵監聽器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM