Java:在JTextPane </enter>上注册<enter>键

时间:2011-09-16 01:38:30

标签: java swing actionlistener jtextpane keycode

我正在使用具有JTextPane的java创建应用程序。我希望能够在按下 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#也可以工作,也许更好。另外,请尝试用示例而不是链接回答问题(除非您确实需要)。谢谢!

3 个答案:

答案 0 :(得分:13)

一种解决方案是在文本窗格上添加键绑定。如,

  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");
     }
  });

答案 1 :(得分:1)

这个答案是万一有人看过这个帖子的      我和穆罕默德·阿迪布先生一样。所以不要使用                 (evt.getKeyCode()== evt.VK_ENTER)      我用                 (evt.getKeyChar()== '\ n')

 and the solution worked.

答案 2 :(得分:0)

我在密码文本字段中查找ENTER键,以在按下ENTER时启动登录方法。下面的代码将在控制台中打印键码。运行程序并在框中键入几个tihngs后,我发现对于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]快捷方式时开始有趣 - 但这是另一个讨论。