我正在使用自动点击器,用户可以在其中设置自定义热键。
我目前有以下功能,它接受一个被指定为热键的键,然后应该将热键文本字段的文本设置为被按下的键。
我不想要密钥的实际名称或字符。我想要它的'图片'可以这么说。好像我实际上在文本字段中键入了键,我想要显示该字符。因此,例如,如果我想将hotkety设置为波浪号(`),那么它应该在文本字段中显示为。
KeyboardFocusManager.getCurrentKeyboardFocusManager()
.addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
int keycode = e.getKeyCode();
hotkeyField.setText("");
KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(this);
return false;
}
});
提前致谢。
答案 0 :(得分:1)
这是一个简短的代码,让您了解。
我添加了一个KeyListener(在这种情况下是一个KeyAdapter,它不是一个界面,但做同样的事情)来监听你键盘上的每个关键事件。 然后,您只需添加在TextField中键入的键。
请注意,KeyListener
仅在所有具有侦听器和焦点的组件中进行侦听。这意味着您需要为所有组件添加相同的侦听器,以便在有焦点时执行此操作。
在例子中,只有标签有听众。如果你点击JButton,那么什么都不会发生。
import java.awt.Dimension;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class FieldListener{
public FieldListener(){
this.initGUI();
}
private void initGUI(){
//Create a frame with a JLabel and a JTextField
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JTextField field = new JTextField();
field.setPreferredSize(new Dimension(80,30));
JLabel label = new JLabel("Shortcut :");
label.setFocusable(true); //Label must be focusable
panel.add(label);
panel.add(field);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
label.requestFocus(); //Set focus on the JLabel to unfocus the JTextField
//Listen every key event on the label
label.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e){
//Set the text with the key typed
field.setText(KeyEvent.getKeyText(e.getKeyCode()));
}
});
}
public static void main(String[] args) {
new FieldListener();
}
}
我希望它能帮到你!