Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:注册<;输入>;按JTextPane上的键_Java_Swing_Actionlistener_Jtextpane_Keycode - Fatal编程技术网

Java:注册<;输入>;按JTextPane上的键

Java:注册<;输入>;按JTextPane上的键,java,swing,actionlistener,jtextpane,keycode,Java,Swing,Actionlistener,Jtextpane,Keycode,我正在用java制作一个具有JTextPane的应用程序。我希望能够在按下enter键(或当用户转到下一行)时执行一些代码。我在网上查过,没有找到解决办法。用C#解决这个问题会更好吗?如果没有,如何在JTextPane的keyTyped()事件中注册Enter键?如果C#是一个好的选择,我将如何在C#中实现这一点 这是一个我认为可行的解决方案……但没有 //Event triggered when a key is typed private void keyTyped(java.awt.eve

我正在用java制作一个具有JTextPane的应用程序。我希望能够在按下enter键(或当用户转到下一行)时执行一些代码。我在网上查过,没有找到解决办法。用C#解决这个问题会更好吗?如果没有,如何在JTextPane的keyTyped()事件中注册Enter键?如果C#是一个好的选择,我将如何在C#中实现这一点

这是一个我认为可行的解决方案……但没有

//Event triggered when a key is typed
private void keyTyped(java.awt.event.KeyEvent evt) {
    int key = evt.getKeyCode();
    if (key == KeyEvent.VK_ENTER) {
        Toolkit.getDefaultToolkit().beep();
        System.out.println("ENTER pressed");
    }
}

上面的例子之所以不起作用,是因为无论我按哪个键,我都会得到一个0的keyCode。我更喜欢用Java解决这个问题,但C#也可以,也许更好。另外,请尝试用例子而不是链接来回答问题(除非你真的需要)。谢谢

一种解决方案是在textpane上添加键绑定。e、 g

  JTextPane textPane = new JTextPane();

  int condition = JComponent.WHEN_FOCUSED;
  InputMap iMap = textPane.getInputMap(condition);
  ActionMap aMap = textPane.getActionMap();

  String enter = "enter";
  iMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), enter);
  aMap.put(enter, new AbstractAction() {

     @Override
     public void actionPerformed(ActionEvent arg0) {
        System.out.println("enter pressed");
     }
  });

如果有人看过这条线索,我会得到和穆罕默德·阿迪布先生一样的答案

所以不是用

(evt.getKeyCode()==evt.VK_ENTER)
我曾经

(evt.getKeyChar()=='\n')

解决方案成功了。

我正在密码文本字段中查找ENTER键,以便在按下ENTER键时启动登录方法。以下代码将在控制台中打印钥匙代码。运行程序并在输入框中键入一些提示后,我发现输入键是代码13

    txtPass = new Text(shlLogin, SWT.BORDER | SWT.PASSWORD);
    txtPass.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            System.out.println(e.keyCode);
            if (e.keyCode == 13) { /* ... Do your stuff ... */ }
        }
    });

如果您希望只按一次键,那么您仍然可以有点懒惰,并通过使用此方法避免学习有关键绑定的新内容。当添加CTRL+[Letter]快捷键时,乐趣就开始了,但这是另一个讨论。

+1 for,虽然默认的插入-中断操作将丢失。@trashgod true,但要求不完全清楚,可以是a)替换默认行为或b)添加到b)的默认行为中,只需将默认行为和触发器包装在custom中。不要使用keyListeners,请使用JavaDocs中建议的@Hovercraft作为键绑定,用于getKeyCode():
用于键类型的事件,keyCode是VK_未定义的。
至少从1.3开始就有这样的文档记录。我对这个问题的评论仍然是:不要使用keyListeners。。。曾经有更高抽象级别的解决方案,请参阅JavaDocs for getKeyCode()的@trashgod回答:
对于键类型的事件,键代码是VK_未定义的。
至少从1.3开始就有这样的文档记录。我想OP从来没有看过这些文件。