作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
请看下面的代码
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class KeyCheck extends JFrame
{
private JButton check;
private JPanel panel;
private FlowLayout flow;
public KeyCheck()
{
check = new JButton("Check");
check.addKeyListener(new KeyWork());
panel = new JPanel();
panel.setLayout(new FlowLayout());
panel.add(check);
getContentPane().add(panel);
}
private class KeyWork extends KeyAdapter
{
public void keyPressed(KeyEvent k)
{
if(k.getKeyCode()==KeyEvent.VK_CONTROL && KeyEvent.VK_A)
{
JOptionPane.showMessageDialog(null, "OK");
}
}
}
public static void main(String[]args)
{
KeyCheck k = new KeyCheck();
k.setVisible(true);
k.setSize(200,200);
k.validate();
k.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
在这种情况下,我向按钮添加了一个按键列表,我需要它在同时按下 CTRL + A(控制键和“A”键)时显示消息“OK”。但是上面的代码是错误的。所以,请帮助我在同时按下两个键时收到消息。
最佳答案
if(k.getKeyCode()==KeyEvent.VK_A
&& (k.getModifiers & KeyEvent.CTRL_MASK==KeyEvent.CTRL_MASK))
但更一般地,最好使用KeyBindings而不是 KeyListener。这将使您的生活更轻松,并且避免您必须进行此类测试。
1.像这样创建一个 Action :
public class MyAction extends AbstractAction {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "OK");
}
}
2.绑定(bind) Action 到击键:
check.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK), "doSomething");
check.getActionMap().put("doSomething", new MyAction());
警告:我还没有测试过这段代码,所以可能需要修复小故障。
关于Java KeyListener : How to perform an action when two keys are pressed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10655010/
我是一名优秀的程序员,十分优秀!