在 Vaadin 中使用快捷方式的问题
我在使用表中的快捷方式时遇到一些问题。我必须自定义一些键:delete - 用于删除行并输入以使表可编辑/不可编辑,向上/向下箭头将表模式从可编辑切换为不可编辑。我将表放在透明面板内,并使用 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);
有什么想法如何做到这一点吗?
I have some problems with shortcuts in Table. I have to customize some keys: delete - for removing the rows and enter to make table editable/uneditable, up/down arrows to switch mode of table from editable to uneditable. I put my Table inside transparent Panel and use Action.Handler to catch keyboard events. But when I'm writing inside TextField, TextArea, Combobox I wanted to propagate events to this component (handling delete key disable using it for deleting text in TextField and up/down keys doesn't allow open Combobox with keyboard). I saw target parameter in handleAction() method, but I don't now how to use it. Also interesting to know how to add shortcuts instead of replacing.
// 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);
Any ideas how to do that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我不确定这是否是实现此目的的最佳或最漂亮的方法,但至少它有效:
这些监听器将在用户每次进入字段时禁用它来处理
deleteHandler
并在用户离开现场时启用它。I'm not sure if this is the best or the most beautiful way to achieve this, but at least it works:
These listeners will take care of the
deleteHandler
by disabling it every time the user enters the field and enabling it whenever the user leaves the field.