您的位置:首页 > 其它

直接按键设置组件的快捷方式

2012-06-21 06:55 323 查看
/article/8007471.html

在很多界面设计中要求给组件设置热键,而这些热键可以由用户修改。用户在修改时只需按键就可以直接操作,这样很方便。

这里主要就是将如何从键盘的输入中获取正确的快捷键设置。

下面直接插入代码:

/**
*All rights reserved,2010,mengke
*/
package com.mengke.j2se.util.test;

import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
*@author mengke
*@email wqjsir@foxmail.com
*@version 2011-1-18下午10:51:31
*/
public class KeyListenerTest implements KeyListener {
private boolean setted;
private int keyCode;
final JTextField textField = new JTextField();

public static void main(String[] args) {
System.out.println(9 & 6);
KeyListenerTest test = new KeyListenerTest();
test.showUI();
}

public void showUI() {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
textField.setEditable(false);
textField.setPreferredSize(new Dimension(160, 30));
textField.addKeyListener(this);
panel.add(textField);
frame.setContentPane(panel);
frame.setSize(new Dimension(200, 300));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

@Override
public void keyPressed(KeyEvent e) {
String key = "";
int keyCode = e.getKeyCode();
if (e.isAltDown()) {
key += "Alt + ";
}
if (e.isControlDown()) {
key += "Ctrl + ";
}

if (e.isShiftDown()) {
key += "Shift + ";
}

String keyChar = getKeyChar(e.getKeyCode());
if (keyChar != null) {
key += keyChar;
}
this.keyCode = keyCode;
textField.setText(key);
textField.updateUI();
if (keyChar != null && keyCode != KeyEvent.VK_SHIFT && keyCode != KeyEvent.VK_ALT
&& keyCode != KeyEvent.VK_CONTROL) {
setted = true;
} else {
setted = false;
}
System.out.println("press:" + key);
}

@Override
public void keyReleased(KeyEvent e) {
if (setted == true) {
return;
}
String key = "";
int keyCode = e.getKeyCode();
if (keyCode != KeyEvent.VK_ALT && keyCode != KeyEvent.VK_CONTROL && keyCode != KeyEvent.VK_SHIFT) {
System.out.println("wu");
textField.setText("无");
textField.updateUI();
return;
}
if (!e.isAltDown() && !e.isShiftDown() && !e.isControlDown()) {
System.out.println("wu");
textField.setText("无");
textField.updateUI();
return;
}

if (e.isAltDown()) {
key += "Alt + ";
}
if (e.isControlDown()) {
key += "Ctrl + ";
}

if (e.isShiftDown()) {
key += "Shift + ";
}
key += KeyEvent.getKeyText(this.keyCode);
textField.setText(key);
textField.updateUI();

System.err.println("release:" + key);
}

@Override
public void keyTyped(KeyEvent e) {

}

/**
* 这里可以设定哪些按键是需要获取的
*
* @param keyCode
* @return
*/
public String getKeyChar(int keyCode) {
if (KeyEvent.VK_0 <= keyCode && KeyEvent.VK_9 >= keyCode || KeyEvent.VK_NUMPAD0 <= keyCode
&& KeyEvent.VK_NUMPAD9 >= keyCode || KeyEvent.VK_A <= keyCode && KeyEvent.VK_Z >= keyCode
|| KeyEvent.VK_F1 <= keyCode && KeyEvent.VK_F24 >= keyCode) {
return KeyEvent.getKeyText(keyCode);
}
return null;
}
}


该代码演示了获取用户设置快捷键的方式。比如在用户按下Ctrl键时,JTextField中将显示Ctrl + ,表示热键还没有设置完成,如图:



如果此时用户松开按键,则显示 无,表示用户每有设置热键,如果用户 在按下Ctrl 键的同时,按下了其他键,比如A键,则显示为 Ctrl + A ,如图:



此时已经是一个完整的热键了,此时松开按键,JTextField的文本内容将不变,表示用户希望设置Ctrl + A 来设置快捷键。其他按键功能类似。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: