为JButtons添加全局键绑定?

时间:2013-11-18 17:13:44

标签: java swing user-interface jbutton

我有:

    for (int i = 0; i <= 9; i++) {
        JButton c = new JButton();
        c.setText(Integer.toString(i));
        ActionListener l = new NumericButtonListener(i);
        c.addActionListener(l);
        buttonGrid.add(c); }

基本上,一些代码会创建一个数字网格。如何映射我的窗格以允许命中相应的数字并触发我的NumericButtonListener?

2 个答案:

答案 0 :(得分:2)

  1. 您可以使用keyBindings并为特定密钥指定一个公共Action

  2. 使用按钮的doClick()函数生成一个Action事件并监听它。您需要在按下映射键的特定按钮上调用此函数。例如:

    Action generateClick = new AbstractAction() {
      public void actionPerformed(ActionEvent e) {
          JButton butt = (JButton) e.getSource();
          butt.doClick();
      }
     };
    

答案 1 :(得分:0)

对每个按钮使用keyBinding。见tutorial for KeyBindings

例如,在创建中添加下一个代码:

c.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(Integer.toString(i)), "doSomething");
c.getActionMap ().put("doSomething", new AbstractAction() {

      @Override
      public void actionPerformed(ActionEvent arg0) {
            System.out.println(c.getText());
      }  
});