如何在Java中的按钮中设置单键助记符?

10

我正在进行一个项目,希望在按钮上设置助记符(Mnemonic)。但问题是助记符通常需要配合键盘绑定,例如 (Alt+F) 等。但我想让它只使用单一按键。

1个回答

8
  • 查看KeyBindings,

  • 然后你可以将任何按键附加到JButton上。

下面是一个示例代码,只需在键盘上按下C即可:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.Action;

public class ButtonExample
{
    private JFrame frame;
    private JButton button;

    private void displayGUI()
    {
        frame = new JFrame("Button Mnemonic Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();      
        Action buttonAction = new ButtonAction("CLICK ME"
                                , "This is a Click Me JButton");
        button = new JButton(buttonAction);                                             
        button.getInputMap().put(KeyStroke.getKeyStroke('c'), "Click Me Button");
        button.getActionMap().put("Click Me Button", buttonAction);

        contentPane.add(button);
        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    class ButtonAction extends AbstractAction
    {
        public ButtonAction(String text, String desc)
        {
            super(text);
            putValue(SHORT_DESCRIPTION, desc);
        }

        @Override
        public void actionPerformed(ActionEvent ae)
        {
            JOptionPane.showMessageDialog(frame, "BINGO, you SAW me.");
        }
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new ButtonExample().displayGUI();
            }
        });
    }
}

再次抱歉更改,无法控制自己,因为现在不能回答与您说的相同的事情。 因此添加了一个示例代码。 如果对指导有足够的帮助,请查看,否则请随意删除 :-) - nIcE cOw
@nIcEcOw 的问题是,按键执行的操作与点击按钮执行的操作不同,这很可能不是预期的。相反,使用 Action 来配置按钮,并在 ActionMap 中重复使用同一个实例。 - kleopatra
@kleopatra 你是想使用JButton.doClick()吗? - mKorbel
我知道你因为@nIcEcOw的代码而受到了负评,这有点不公平 - 你想给你们任何一个人提供纠正它的动力吗?顺便说一下,在操作中使用doClick确实是一种选择,只是不是最优选择,我个人认为,主要是因为你应该始终优先考虑使用Actions而不是ActionListener+属性来配置按钮。 - kleopatra
@kleopatra:我刚刚意识到,这就是我认为我错过的东西,正如垃圾神曾经告诉我关于使用Action的事情:-),但由于现在我离开了电脑,用的是iPad,我需要一些时间再次编辑代码。如果你能帮我完成这个非常必要的任务,我将不胜感激 :-) - nIcE cOw
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接