标签: keyevent

我怎样才能完美地模拟KeyEvents?

我如何构建自己的KeyEvent对象,它完全(或非常接近)匹配我从KeyListener最终用户输入内容时收到的对象?


例如,我有一个英国的ISO键盘布局,并键入"我按下的字符Shift+2.如果我JFrame用a 记录这个KeyListener,我会收到以下事件:

java.awt.event.KeyEvent[KEY_PRESSED,keyCode=16,keyText=Shift,keyChar=Undefined keyChar,modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_LEFT,rawCode=16,primaryLevelUnicode=0,scancode=42,extendedKeyCode=0x10] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=50,keyText=2,keyChar='"',modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_STANDARD,rawCode=50,primaryLevelUnicode=50,scancode=3,extendedKeyCode=0x32] on frame0
java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar='"',modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=16,keyText=Shift,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_LEFT,rawCode=16,primaryLevelUnicode=0,scancode=42,extendedKeyCode=0x10] on frame0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=50,keyText=2,keyChar='"',keyLocation=KEY_LOCATION_STANDARD,rawCode=50,primaryLevelUnicode=50,scancode=3,extendedKeyCode=0x32] on frame0
Run Code Online (Sandbox Code Playgroud)

我想创建一个方法,我将其"作为char参数,它将返回上面列出的KeyEvents数组.

我的问题是:

  • KEY_PRESSEDKEY_RELEASED事件中,keyChar='"'表示按下的字符("),但是keyCode=50指的是"非移位"的ASCII值(又名2).我需要知道如何从"字符中获取这个非移位值.

  • 对于不同的键盘布局,此非移位值也将不同.例如,美国ANSI布局需要Shift+'键入"密钥,这意味着keyCode将是39而不是50.

  • 在某些键盘布局中,Shift键需要键入键,而不是其他键.#例如,该字符需要Shift+3美国ANSI键盘,但不需要在英国ISO键盘上按压.我需要知道是否应该模拟移位按下/释放事件并提供移位修改器.

任何有关如何解决这些问题的见解将不胜感激.我还应该注意,Robot在我的情况下使用该类不能使用.

java keyevent

10
推荐指数
1
解决办法
3884
查看次数

Java如何调度KeyEvents?

我已经阅读了几次关于键绑定的明确教程,但是我的脑缓存似乎不足以容纳复杂的进程.

我正在调试一个键绑定问题(事实证明我使用的是错误的JComponent.WHEN_*条件),我偶然发现javax.swing.KeyboardManager了一个(不幸的)匿名Java工程师私有包的简洁和欢闹的javadoc .

我的问题是:除了KeyEventDispatcher在一开始就检查过,描述是否错过和/或错误?

KeyboardManager类用于帮助调度WHEN_IN_FOCUSED_WINDOW样式操作的键盘操作.具有其他条件的操作直接在JComponent中处理.

下面是我理解的键盘调度应该如何工作的语法[原文如此]的描述.[原文如此].

KeyEvents被分派到焦点组件.焦点管理员首先处理此事件.如果焦点管理器不想要它,那么JComponent调用super.processKeyEvent(),这允许侦听器有机会处理事件.

如果没有一个听众"消费"该事件,那么键绑定就会得到一个镜头.事情开始变得有趣.首先,使用WHEN_FOCUSED条件定义的KeyStokes [sic]有机会.如果这些都不想要该事件,那么该组件会通过它[sic]父母查找WHEN_ANCESTOR_OF_FOCUSED_COMPONENT类型的操作.

如果还没有人接受它,那么它就会在这里结束.然后,我们查找为WHEN_IN_FOCUSED_WINDOW事件注册的组件并触发它们.请注意,如果没有找到这些,那么我们将事件传递给菜单栏并让它们有一个裂缝.他们的处理方式不同.

最后,我们检查一下是否正在查看内部框架.如果我们是,并且没有人想要这个事件,那么我们将向上移动到InternalFrame的创建者,看看是否有人想要这个事件(依此类推等等).


(更新)如果你曾经想过关键绑定指南中这个大胆的警告:

因为搜索组件的顺序是不可预测的,所以避免重复WHEN_IN_FOCUSED_WINDOW绑定!

这是因为以下部分KeyboardManager#fireKeyboardAction:

     Object tmp = keyMap.get(ks);
     if (tmp == null) {
       // don't do anything
     } else if ( tmp instanceof JComponent) {
           ...
     } else if ( tmp instanceof Vector) { //more than one comp registered for this
         Vector v = (Vector)tmp;
             // There is no well defined order for WHEN_IN_FOCUSED_WINDOW
             // bindings, but we …
Run Code Online (Sandbox Code Playgroud)

java swing keyevent key-bindings

9
推荐指数
1
解决办法
2352
查看次数

来自黑莓手机上的Javascript KeyUp

我目前正在开发一个专为浏览器和移动设备设计的网页,但我遇到了黑莓手机的问题

我想要的功能是在按下键时触发弹出窗口.我目前的代码可以在浏览器中使用,但不能在黑莓上运行.我在运行OS 5.0的黑莓模拟器上启用了javascript和javascript弹出窗口.

最初的电话:

 window.onkeyup = GetKeyUp;
Run Code Online (Sandbox Code Playgroud)

然后方法:

 function GetKeyUp(e) {
        var KeyID = (window.event) ? event.keyCode : e.keyCode;
        alert(KeyID);
}
Run Code Online (Sandbox Code Playgroud)

什么不适用于可在浏览器中运行的Blackberry?或者:

如何从javascript捕获黑莓上的按键?

谢谢,Ty

最新开发:使用"window.addEventListener("keyup",...)"或"document.addEventListener("keyup",...)"而不是工作.

javascript blackberry keyevent

9
推荐指数
1
解决办法
494
查看次数

如何使用javascript强制"输入密钥"充当"tab键"?

我正在一个充满要填充的表格的网站上工作,我需要按下退出按钮时焦点移动到下一个输入控件,就像按"标签"一样.我发现当keypressed为13时移动焦点的代码,但这需要将元素的ID集中在上面

<input id="Text1" type="text" onkeydown="return noNumbers(event)" />
<input id="Text2" type="text" />

<script type="text/javascript">

    function noNumbers(e) {

        keynum = e.which;

        if (keynum == 13)
            document.getElementById("Text2").focus();

    }
</script>
Run Code Online (Sandbox Code Playgroud)

我需要一个通用的功能,当按键代码是13"即输入"触发按下9的默认事件"是标签",当然在Javascript

javascript keyevent onkeydown

9
推荐指数
2
解决办法
3万
查看次数

Android - 在软键盘上捕获"完成"和"输入"键事件

我的应用程序中有一个登录页面,其中列出了以下元素:

  • 用户名(EditText)
  • 密码(EditText)
  • 登录(按钮)

按下时Login,它将进入主屏幕.当用户Done在软键盘上键入密码完成时点击时,执行相同的动作Samsung Galaxy S3; 和Enter软键盘上的键HTC One X.

那么,密码字段的EditText如何是:

<EditText
    android:id="@+id/password_txt"
    android:layout_width="200dip"
    android:layout_height="wrap_content"
    android:imeOptions="flagNoExtractUi"
    android:inputType="textPassword"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="8dp"
    android:singleLine="true" />
Run Code Online (Sandbox Code Playgroud)

在活动中,无论我尝试了什么,都在这里:

EditText mPassword = (EditText) findViewById(R.id.password_txt);
mPassword.setOnEditorActionListener(new TextView.OnEditorActionListener() {

                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER || actionId == EditorInfo.IME_ACTION_DONE){
                        Log.e("MyApp", " ------> IN EDITOR ACTION DONE");
                    }
                    return false;
                }
            });
Run Code Online (Sandbox Code Playgroud)

我确实尝试保持密码字段的imeOptions actionDone以及flagNoExtractUi …

android login keyevent android-softkeyboard android-edittext

9
推荐指数
1
解决办法
1万
查看次数

使用jQueryMobile捕获BlackBerry中的退格键

有没有办法input[type="text"]在BlackBerry中捕获退格键?我试过$('input[type="text"]').bind('keydown', function(event) { ... });并捕获除退格(del)之外的所有按键事件.按此键不会触发任何键事件.

有谁知道捕捉事件的方法?

我正在为OS 6.0开发并使用BlackBerry模拟器9800进行测试.

编辑 - 我正在测试的代码

<div id="myPage" data-role="page" data-theme="b">

  <div data-role="content">  
    <input type="text"  id="ddd" />
  </div>

  <script type="text/javascript">
    $('input[type="text"]').bind('keydown', function(e){
      if(e.keyCode == 8)
        alert('backspace trapped')
    });
  </script>

</div>
Run Code Online (Sandbox Code Playgroud)

blackberry keyevent blackberry-simulator jquery-mobile jquery-events

8
推荐指数
1
解决办法
5058
查看次数

无法在JavaFX中侦听KeyEvent

我希望我的JavaFX程序能够响应键盘事件.
我尝试将监听器添加到root Pane,最顶层Pane,但它不响应事件!
这是我的代码:

   AnchorPane root = new AnchorPane();
   root.setOnKeyPressed(new EventHandler<KeyEvent>() {

        @Override
        public void handle(KeyEvent t) {
            pressKey(t.getCharacter().charAt(0));
        }
    });
    root.setOnKeyReleased(new EventHandler<KeyEvent>() {

        @Override
        public void handle(KeyEvent t) {
            releaseKey(t.getCharacter().charAt(0));
        }
    });
    root.addEventHandler(EventType.ROOT, new EventHandler<Event>() {

        @Override
        public void handle(Event t) {
            if (t.getClass().equals(KeyEvent.class)) {
                System.out.println("AAARGH! " + ((KeyEvent)t).getCharacter());
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

为什么你不工作,关键事件?我在这里做错了吗?
可以肯定的是,鼠标事件可以使用相同的代码正常工作.

keyevent keyboard-events javafx-2

8
推荐指数
1
解决办法
1万
查看次数

如何在OSX上拖放期间检测META键按下

OSX上的Java 6/7中存在一个错误,在拖放操作期间,它会忽略META(CMD)密钥.(Ctrl键在Windows上运行正常,在OSX上也忽略Ctrl键)我真的需要这个工作.

请参阅:Java拖放OS X报告移动而不是复制

我尝试将KeyEventDispatcher侦听器添加到KeyboardFocusManager,但在Drag操作期间不会调用它.

也不会调用父JPanel的processKeyEvent()方法.

那么,有什么地方可以放钩来检测META按键吗?

java macos swing drag-and-drop keyevent

8
推荐指数
1
解决办法
353
查看次数

如何通过JavaScript使用F11键事件使浏览器全屏显示

我想让我的浏览器全屏.和我们做F11关键事件时一样.我发现了一些例子

function maxwin() {
    var wscript = new ActiveXObject("WScript.Shell");
    if (wscript!=null) {
         wscript.SendKeys("{F11}");
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个不适用于Mozilla或任何其他最新的浏览器.如果有任何方法可以解决这个问题,请告诉我.

谢谢.(提前.)

javascript browser screen fullscreen keyevent

7
推荐指数
3
解决办法
6万
查看次数

如何从Android移动设备键盘获取keyCodes?

目前,我在移动设备上遇到问题.我有一个输入字段,只允许按下某些键:例如,只有数字0-9.它在网络浏览器上运行得很棒.但是当我在我的Android移动设备中打开它时,它会失败.

我用过keyupkeypress.keyup正在工作,但我想知道哪个键从移动键盘发起了事件.我怎么会这样?

javascript mobile jquery android keyevent

7
推荐指数
1
解决办法
1万
查看次数