Vaadin 8 MessageBox能否通过按键关闭?ESC绑定关闭按钮需求
如何给Vaadin MessageBox绑定ESC键实现关闭?
当然可以实现!Vaadin的MessageBox虽然默认没在官方文档里明确标注ESC键的绑定方法,但我们可以借助Vaadin组件通用的快捷键监听机制来搞定这个需求。
针对你给出的代码片段,我们可以这样修改,把ESC键绑定到弹窗的关闭操作:
MessageBox mb = MessageBox.createInfo(); mb.withMessage("Directory does not exist. Do you wish to create it?") .withYesButton(this::copyToNewDir, ButtonOption.focus()) // 先添加一个No按钮(如果不需要显示也可以跳过,但建议保留逻辑上的关闭入口) .withNoButton(() -> mb.close()) // 绑定ESC键触发关闭 .addShortcutListener(e -> { if (mb.isOpened()) { mb.close(); } }, Key.ESCAPE);
如果希望ESC键直接触发No按钮的点击逻辑(而不是单纯关闭弹窗),也可以直接获取No按钮并触发它的点击事件:
MessageBox mb = MessageBox.createInfo(); mb.withMessage("Directory does not exist. Do you wish to create it?") .withYesButton(this::copyToNewDir, ButtonOption.focus()) .withNoButton(() -> { // 这里可以写No按钮的自定义逻辑 mb.close(); }); // 获取No按钮并绑定ESC键触发点击 Button noButton = mb.getButton(ButtonType.NO); mb.addShortcutListener(e -> noButton.click(), Key.ESCAPE);
核心思路就是利用addShortcutListener方法,给MessageBox组件添加ESC键的监听,然后在回调里执行关闭弹窗或者对应按钮的逻辑——毕竟MessageBox本质上也是Vaadin的一个常规组件,完全支持这类通用的组件操作。
内容的提问来源于stack exchange,提问作者Pavol
相关产品推荐
相关产品推荐

