Java:在JTextPane上注册<ENTER>键

Moh*_*dib 9 java swing keycode jtextpane actionlistener

我正在使用具有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");
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么上面的例子不起作用是因为无论我按哪个键,我得到一个0的keyCode.我更喜欢用Java解决这个问题但是C#也可以工作,也许更好.另外,请尝试用示例而不是链接回答问题(除非您确实需要).谢谢!

Hov*_*els 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");
     }
  });
Run Code Online (Sandbox Code Playgroud)

  • 虽然默认的插入 - 中断操作将丢失,但[key bindings](http://download.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)为+1. (3认同)
  • @trashgod为true,但要求不完全清楚,可能是a)替换默认行为或b)添加到默认行为对于b)只需在自定义中包装默认和触发器 (2认同)