直接按键设置组件的快捷方式
2012-06-21 06:55
323 查看
/article/8007471.html
在很多界面设计中要求给组件设置热键,而这些热键可以由用户修改。用户在修改时只需按键就可以直接操作,这样很方便。
这里主要就是将如何从键盘的输入中获取正确的快捷键设置。
下面直接插入代码:
该代码演示了获取用户设置快捷键的方式。比如在用户按下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按键设置快捷方式
- Ubuntu11.10设置桌面启动器(桌面快捷方式)
- Android桌面组件widget与快捷方式shortcut
- ubuntu下eclipse的快捷方式设置
- 给phpstorm 设置代码片段 快捷方式
- nullnullandroidstudio 设置成eclipse的快捷方式
- 在Ubuntu 14.04 桌面上设置启动器(快捷方式)
- 鼠标设置按键功能方式(例如设置鼠标侧键为复制粘贴功能)
- Ubuntu11.10设置桌面启动器(桌面快捷方式) (转载)
- SSMS查询快捷方式设置
- Ubuntu14.04 x64系统设置Qt5.8桌面快捷方式
- SAPGUI 快捷方式设置密码
- Android 笔记 快捷方式 / 桌面小组件
- Android桌面快捷方式的设置(一)
- 设置环境变量快捷方式