2016-06-15 4 views
0

По неизвестной причине этот код не работает.KeyStroke с ключами 1-9 не работает с Keymap JTextComponent

JTextComponent component = new JTextArea(); 
Keymap keymap = component.getKeymap(); 
keymap.addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_1, InputEvent.ALT_DOWN_MASK), myAction); 

Он никогда не вызывает myAction при нажатии Alt и 1 (не на цифровой клавиатуре, то 1 над буквами). Это также не работает ни для какого модификатора.

Решение, данное здесь https://stackoverflow.com/a/11974908/3838784 не работает, действие по-прежнему не срабатывает. Удаление всех нажатий клавиш с карты ключей с ALT в качестве модификатора также не помогает.

+0

это работает для меня –

+0

выглядит так, как будто проблема происходит только с 1-9 ключами (не Numpad из них) – utybo

+0

1-9 ключей? действие срабатывает, когда я нажимаю alt + q –

ответ

1

Я пробовал образец, используя ваш код, кажется, он работает нормально. Можете ли вы сообщить мне, если что-то отличается от вашего кода?

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.InputEvent; 
import java.awt.event.KeyEvent; 
import javax.swing.*; 
import javax.swing.UIManager.LookAndFeelInfo; 
import javax.swing.text.JTextComponent; 
import javax.swing.text.Keymap; 

public class MyExample extends JFrame { 

    MyExample() { 
     initGUI(); 
    } // Constructor 

    private void initGUI() { 
     // Create the button 
     JButton myButton = new JButton("Press ME !"); 

     // Create the label 
     JLabel testLabel = new JLabel("TEST !!!"); 

     // Set up the window 
     JPanel pane = (JPanel) getContentPane(); 
     pane.setLayout(new BorderLayout()); 

     pane.add(myButton, BorderLayout.CENTER); 
     pane.add(testLabel, BorderLayout.SOUTH); 
     JTextComponent component = new JTextArea(); 
     pane.add(component, BorderLayout.SOUTH); 
     Keymap keymap = component.getKeymap(); 

     keymap.addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_1, InputEvent.ALT_DOWN_MASK), new MyAction()); 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     pack(); 
     // setSize(600,300); 

    } 

    public static void main(String[] args) { 
     try { 
      // Set System L&F 
      for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (UnsupportedLookAndFeelException e) { 
      // handle exception 
     } catch (ClassNotFoundException e) { 
      // handle exception 
     } catch (InstantiationException e) { 
      // handle exception 
     } catch (IllegalAccessException e) { 
      // handle exception 
     } 
     // new MyExample().setVisible(true); 
     EventQueue.invokeLater(() -> { 
      MyExample me = new MyExample(); 
      me.setVisible(true); 
     }); 
    } 

    class MyAction extends AbstractAction{ 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      System.out.println("Action performed"); 
     } 

    } 
} 
+0

Ваш образец не работает для меня. Это должно быть ошибкой в ​​Ubuntu MATE или чем-то, и OpenJDK, и Oracle JDK не работают при запуске этого теста ... :( – utybo

+0

yep я мог бы быть. Я не использую ubuntu, поэтому мне было бы возможно проверить бот. Но это работает в Windows. – Beniton

 Смежные вопросы

  • Нет связанных вопросов^_^