【问题标题】:Capture ctr-z(undo) and ctr-y(redo) within GWT application在 GWT 应用程序中捕获 ctrl-z(undo) 和 ctrl-y(redo)
【发布时间】:2011-10-27 09:55:10
【问题描述】:

我一直在编写一个基于 GWT 2.3 的 Web 应用程序,同时我还编写了自己的撤消和重做功能。当用户按下 ctr-z 或 ctr-y 时,撤消或重做最后的更改。他们是一种有效检测页面上任何地方发生的 ctr-z 和 ctr-y 按键事件并导致它们运行我自己的功能的方法。

【问题讨论】:

    标签: java javascript gwt jakarta-ee jsni


    【解决方案1】:

    添加NativePreviewHandler

    Event.addNativePreviewHandler(new NativePreviewHandler() {
      @Override
      public void onPreviewNativeEvent(NativePreviewEvent event) {
        if (event.getTypeInt() == Event.ONKEYDOWN) {
          NativeEvent ne = event.getNativeEvent();
    
          if (ne.getCtrlKey() && ne.getKeyCode() == 'Z') {
            event.cancel();
            // Handle undo
          } else if (ne.getCtrlKey() && ne.getKeyCode() == 'Y') {
            event.cancel();
            // Handle redo
          }
        }
      }
    });
    

    【讨论】:

    • 感谢您的回答,但它对我不起作用要调试,我更改了您的代码以记录按下的键。 Event.addNativePreviewHandler(new NativePreviewHandler() { @Override public void onPreviewNativeEvent(NativePreviewEvent event) { if (event.getTypeInt() == Event.ONKEYDOWN) { NativeEvent ne = event.getNativeEvent(); GWT.log(ne.getCtrlKey( ) ? " CTRL" : "" + ne.getKeyCode()); } } });
    • 当我点击 ctr+y 或 ctr+z 时,无论选择的键是什么,结果都是一样的,结果是“ctr”记录的结果是:CTRL 17 注意我使用 Firefox 进行测试跨度>
    • 抱歉,您需要使用大写字符而不是我最初包含在示例中的小写字符。我已经更新了答案。您看到的 CRTL 17 用于控制键 - 17 是控制键的 ASCII 码 - 如果您按住控制键并按下另一个键,您将看到不同的字符代码。
    猜你喜欢
    • 2011-09-26
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2022-11-11
    相关资源
    最近更新 更多