java - 如何在 Vaadin 中将 Keylistener 添加到 ListSelect?

标签 java vaadin vaadin7

我有一个 vaadin ListSelect如果 key DEL 我想删除项目的组件用来。

我只找到了 ShortcutListener但如果我添加以下监听器,DEL key 在我的应用程序的其余部分不起作用(例如,删除 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 实现监听器? key ?

编辑:尝试使用包装器 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);

formGridLayoutform 的父级是 Panel .此面板是 TabSheet 的一部分.我使用的是 Vaadin 版本 7.7.1。

最佳答案

查看 sources (currently line 110) ,似乎该操作已委托(delegate)给包含窗口...

/**
 * 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 shortcut (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 delete key shortcut listener

关于java - 如何在 Vaadin 中将 Keylistener 添加到 ListSelect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39631762/

相关文章:

java - 使用 Java 从命名管道连续读取

java - 使用 Binder 进行表单验证

java - Vaadin 网格表 : how to draw border for certain columns?

vaadin - 在 Vaadin 中水平居中弹出窗口

tomcat - vaadin push 适用于 tomcat 7 但不适用于 tomcat 8

java - 在不使用 Maven 的情况下在 NetBeans 上使用 Vaadin

generics - 为什么 Java 不允许在泛型方法定义中封装?

java - ObjectMapper 反序列化所需字段

java - POST 到 Jersey REST 服务时出现错误 415 不支持的媒体类型

java - Vaadin 布局间距