将动作发送到正在侦听它的按钮

时间:2013-06-28 13:53:44

标签: java swing jbutton actionlistener keylistener

我有一个有动作监听器的JButton。

btn_.addActionListener(new ActionListener()
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        // DO STUFF
    }
}

我有一个JSpinner,可以监听关键事件。

spn_.addKeyListener(new KeyAdapter()
{
    @Override
    public void keyPressed(KeyEvent e)
    {
        if(e.getKeyCode() == KeyEvent.VK_ENTER)
        {
            System.out.println("Someone pressed enter key");
        }
    }
});

我想做的是,当用户在选择微调器时按下回车键时,我希望它执行按钮的任何命令。 是的我明白我可以简单地为动作按钮执行一个功能,然后在用户按下回车键时执行相同的功能。我问这个是因为我很好奇Swing中的组件是否可以向对方发送动作以及如何执行它而不是正确的编程方式。

3 个答案:

答案 0 :(得分:3)

  

是的我明白我可以简单地为动作按钮执行一个功能,然后在用户按下回车键时执行相同的功能。我问这个是因为我很好奇Swing中的组件是否可以向对方发送动作以及如何执行它而不是正确的编程方式。

如果你暗示执行某个函数是正确的方法,我建议这不是解决问题的最佳方法。

正确的方法是共享Action,而不是您调用的方法。

在此解决方案中,您根本不应该使用KeyListener。一般的解决方案是使用密钥绑定。有关详细信息,请阅读How to Use Key Bindings上的Swing教程。

但是,在您的情况下,它甚至更容易,因为您可以只共享ActionListener:

ActionListener al = new ActionListner() {...}

JTextField editor = ((JSpinner.DefaultEditor)spinner.getEditor()).getTextField();
editor.addActionListener(al);
button.addActionListener(al);

答案 1 :(得分:1)

使用JButton的doClick()方法:

btn_.doClick()

keyPressed内如下:

spn_.addKeyListener(new KeyAdapter()
{
    @Override
    public void keyPressed(KeyEvent e)
    {
        if(e.getKeyCode() == KeyEvent.VK_ENTER)
        {
            btn_.doClick()
        }
    }
});

oracle doc:

中指定的doClick()方法
  

以编程方式执行“点击”。这与做同样的事情   用户按下并释放按钮。

答案 2 :(得分:1)

spn_.addKeyListener(new KeyAdapter()
{
    @Override
    public void keyPressed(KeyEvent e)
    {
        if(e.getKeyCode() == KeyEvent.VK_ENTER)
        {
            btn_.doClick(); // fires the actionPerfomed on the button
        }
    }
});