Java: зарегистрируйте <ENTER>нажатие клавиши на JTextPane - PullRequest
9 голосов
/ 16 сентября 2011

Я делаю приложение с Java, которое имеет JTextPane.Я хочу иметь возможность выполнять некоторый код при нажатии клавиши enter (или когда пользователь переходит на следующую строку).Я посмотрел в Интернете и не нашел решения.Было бы лучше решить эту проблему с помощью C #?Если нет, то как я могу зарегистрировать клавишу Enter в событии keyTyped () JTextPane?Если 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. Я бы предпочел решение этой проблемы в Java, но C # будет работать так же хорошо, может быть, лучше.Также, пожалуйста, попробуйте ответить на вопрос примерами, а не ссылками (если вам не нужно).Спасибо!

Ответы [ 3 ]

13 голосов
/ 16 сентября 2011

Одним из решений является добавление привязки клавиш в текстовое поле.например,

  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 голос
/ 19 июня 2013

Этот ответ на тот случай, если кто-нибудь когда-нибудь просмотрит эту ветку, я получу те же вещи, что и мистер Мохаммад Адиб.Поэтому вместо использования (evt.getKeyCode () == evt.VK_ENTER) я использую (evt.getKeyChar () == '\ n')

 and the solution worked.
0 голосов
/ 20 мая 2014

Я ищу клавишу ВВОДА в текстовом поле пароля, чтобы запустить метод входа в систему при нажатии клавиши ВВОД. Код ниже напечатает в консоли код ключа. После запуска программы и ввода нескольких строк в поле, которое я обнаружил для клавиши ВВОД, это код 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] - но это для другого обсуждения.

...