我基本上希望能够通过按键盘上的键来按下JButton。例如:
如果我按下" T",它应该使用JButton" Testing"。如果我按下" H",它应该使用JButton" Hello"等等...
这是最简单(也是最懒惰)的方法吗?
答案 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那样动画,并且助记符不会在按钮的标签中自动加下划线。