1

我有一个具有动作监听器的 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 中的组件是否可以相互发送动作以及如何发送动作,而不是正确的编程方式。

4

3 回答 3

3

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

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

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

在此解决方案中,您根本不应该使用 KeyListener。一般的解决方案是使用键绑定。阅读有关如何使用键绑定的 Swing 教程以获取更多信息。

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

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

JTextField editor = ((JSpinner.DefaultEditor)spinner.getEditor()).getTextField();
editor.addActionListener(al);
button.addActionListener(al);
于 2013-06-28T15:11:03.973 回答
1

使用JButton 的doClick()方法:

btn_.doClick()

keyPressed如下:

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

doClick()oracle doc中指定的方法:

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

于 2013-06-28T13:56:16.323 回答
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
        }
    }
});
于 2013-06-28T13:58:11.423 回答