使用密钥

时间:2016-06-07 11:41:17

标签: java jbutton

我基本上希望能够通过按键盘上的键来按下JButton。例如:

如果我按下" T",它应该使用JButton" Testing"。如果我按下" H",它应该使用JButton" Hello"等等...

这是最简单(也是最懒惰)的方法吗?

1 个答案:

答案 0 :(得分:-1)

在该按钮上设置mnemonic字符

JButton btnTesting = new JButton("Testing");
btnTesting.setMnemonic('T');

在这种情况下,您可以按alt + T来使用它。

修改

要在没有ALT键的情况下重现此功能,您必须使用在容器上注册的KeyListener。您必须实现逻辑,以确定哪个键对应于哪个按钮。

样品:

import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

    public class ButtonPressDemo {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    initGUI();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    private static void initGUI() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(100, 100, 300, 300);

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
        // add your buttons
        contentPane.add(new JButton("A"));
        contentPane.add(new JButton("B"));
        contentPane.add(new JButton("C"));

        contentPane.addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent e) {
                int keyPressed = e.getKeyCode();
                System.out.println("pressed key: "+keyPressed);
                // do something ...
            }
        });
        contentPane.setFocusable(true); // panel with keyListener must be focusable
        frame.setContentPane(contentPane);
        contentPane.requestFocusInWindow(); // panel with key listener must have focus
        frame.setVisible(true);
    }
}

使用这种方法,您的GUI不会在视觉上对按下助记键做出反应,即按钮不会像使用setMnemonic那样动画,并且助记符不会在按钮的标签中自动加下划线。