【问题标题】:How to set a Single key Mnemonic in button in Java?如何在 Java 中的按钮中设置单键助记符?
【发布时间】:2012-07-07 13:20:23
【问题描述】:

我正在做一个项目,我想在按钮上设置助记符。但问题是助记符适用于配对键示例 (Alt+F) 等。但我希望它是单键。

【问题讨论】:

    标签: java swing jbutton key-bindings


    【解决方案1】:
    • 看看 KeyBindings,

    • 那么您可以将任何 Key 附加到 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();
                }
            });
        }
    }
    

    【讨论】:

    • 再次原谅我的编辑,无法阻止自己,因为我现在无法回答,和你说的一样。所以添加了一个示例代码。请看一下,如果它对指导足够好,否则删除它,一如既往地随意:-)
    • @nIcEcOw 故障是该键执行其他操作然后单击按钮,这很可能不是故意的。相反,使用 Action 来配置按钮并在 ActionMap 中重复使用相同的实例
    • @kleopatra 你的意思是使用 JButton.doClick()
    • 我知道你对@nIcEcOw 的代码投了反对票有点不公平 - 想给你们任何人一个激励来纠正它:-) 顺便说一句,在行动中点击 一个选项,只是不是最佳的,IMO,主要是因为你应该总是喜欢 Actions 而不是 ActionListener+properties 来配置按钮
    • @kleopatra :我刚刚意识到,这就是我认为我错过的东西,正如垃圾神曾经说过的关于使用 Action :-),但自从现在我离开我的 iPad 上的电脑后,我需要一些时间再次编辑代码。如果您能帮上忙,我将不胜感激 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2011-05-07
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多