java - 为什么按键事件没有发送到 GWT 的 TextInputCell.onBrowserEvent() 方法?

标签 java gwt

问题:

我正在重写 GWT TextInputCell.onBrowserEvent() 方法,以尝试对在字段中输入的字符应用过滤。我如何无法获取用户在 keydown 事件中输入的实际字符?

我尝试过的:

我可以使用 NativeEvent.getKeyCode() 方法来获取按键代码,但这还不够,因为我想知道他们输入的特定字符,因此我可以将该字符与普通 express 。据我了解, keyCode 只是告诉我他们在键盘上键入的键,所以我无法区分大写“A”和小写“a”。我还可以在 keyup 事件上从 InputElement 获取值,但这已经太晚了,因为角色已经渲染到 UI 元素。

当我调用 NativeEvent.getCharCode() 时,它会为我输入的任何字符返回 0。我在 Chrome 和 Firefox 上尝试过这个。为什么getCharCode()总是返回0?这是一个错误吗?

例如,以下是我尝试过的方法以及在键盘上输入数字“1”时得到的值:

event.getKeyCode() - 49
event.getCharCode() - 0
Character.toChars(event.getCharCode())[0] - (a box character because charCode was 0)
String.valueOf(Character.toChars(event.getCharCode())) - (a box character because charCode was 0)
String.valueOf((char) event.getKeyCode()) - 1

更新:

好的,所以我发现我需要捕获 keypress 事件而不是 keydown,但我打印了每个 event.getType() 我键入时发生的每个事件的值,但我从未看到触发过任何 keypress 事件。所以我更新的问题是,为什么 keypress 事件没有发生?如果我无法在 TextInputCell.onBrowserEvent() 方法中捕获它,是否有其他方法为 TextInputCell 捕获它。

最佳答案

事实证明,AbstractCell 采用了表示“consumedEvents”的字符串列表。这基本上限制了子单元类可以处理的事件类型。 TextInputCell 传入change 和keyup 事件类型。 AbstractInputCell 添加了焦点、模糊和按键功能。因此,TextInputCell 无法处理按键 native 事件。

我最终在自己的项目中创建了 TextInputCell 的近乎精确的副本,并将按键类型添加到构造函数中。然后我就能够捕获事件并进行我想做的过滤。我将在 GWT 中创建一个请求,将此功能添加到 TextInputCell 中。

我还创建了一个功能请求以将此功能添加到 GWT:http://code.google.com/p/google-web-toolkit/issues/detail?id=5891

关于java - 为什么按键事件没有发送到 GWT 的 TextInputCell.onBrowserEvent() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4738583/

相关文章:

java - 我如何从速度计应用程序中找到高速?

python - 我应该使用什么 Python Web 框架与 GWT 来从 Python 后端流式传输 KML?

javascript - 使用 PDF.js 链接、超链接到 Canvas

gwt - 在 gwt 中重复命令

google-app-engine - 使用带有 GAE 的 GWT-TestCase 测试 RPC 调用的示例

java - 循环嵌套的 ArrayList 以使用 gson 显示来自 JSON 的值

java - 在 HTML 表格中显示旋转图像时出现意外的垂直缩放

java - 在 tomcat7 中找不到 Websocket 端点路径

java - 不应该将 SoLinger 设置为错误地切断此连接吗?

java - 如何从 Windows 小工具进行 GWT RPC 调用?