直接按键设置组件的快捷方式
2011-01-19 00:31
477 查看
在很多界面设计中要求给组件设置热键,而这些热键可以由用户修改。用户在修改时只需按键就可以直接操作,这样很方便。
这里主要就是将如何从键盘的输入中获取正确的快捷键设置。
下面直接插入代码:
该代码演示了获取用户设置快捷键的方式。比如在用户按下Ctrl键时,JTextField中将显示Ctrl + ,表示热键还没有设置完成,如图:
如果此时用户松开按键,则显示 无,表示用户每有设置热键,如果用户 在按下Ctrl 键的同时,按下了其他键,比如A键,则显示为 Ctrl + A ,如图:
此时已经是一个完整的热键了,此时松开按键,JTextField的文本内容将不变,表示用户希望设置Ctrl + A 来设置快捷键。其他按键功能类似。
这里主要就是将如何从键盘的输入中获取正确的快捷键设置。
下面直接插入代码:
/** *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 来设置快捷键。其他按键功能类似。
相关文章推荐
- 直接按键设置组件的快捷方式
- Android: 设置模拟按键快捷方式
- QT按键设置快捷方式
- 在notepad++中直接运行python代码快捷方式设置
- QT按键设置快捷方式
- WPF菜单快捷方式怎么设置
- cmd设置快捷方式
- 代理服务器设置 && PC上装载旧版本驱动程序 && 查看windows登陆记录 && WIN7上跳过从windows update获取驱动 && 在开始菜单添加应用快捷方式
- Fedora18设置终端快捷键 和 桌面快捷方式
- Ubuntu11.10设置桌面启动器(桌面快捷方式)
- python 常用技巧 1.设置pip国内源 2.打开服务器上的图像界面3.创建linux命令的快捷方式4.中文编码
- HOWTO:InstallShield中添加一个卸载快捷方式或设置反卸载 - DISK1TARGET
- Ubuntu下设置快捷截图方式
- sublime 在Mac终端下设置快捷打开方式
- eclipse快捷方式设置
- 在Ubuntu 12.04 桌面上设置启动器(快捷方式)
- androidstudio 设置成eclipse的快捷方式
- [转] 给ubuntu中的软件设置desktop快捷方式(以android studio为例)
- ubuntu14.04下快捷方式的设置