主要是在做触屏的SWING软件时,遇到需要用户输入中文的情况,系统的osk的按钮太多了,而且没有办法定制化,所以就自己写了一个模拟的。以下是代码:

package test.swing;import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.HashMap;
import java.util.Map;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;public class KeyboardTest extends JPanel implements ActionListener{JTextField text  ;Robot robot;int[] line1 = {192,49,50,51,52,53,54,55,56,57,48,45,61,8}; // 按键的第一排int[] line2 = {81,87,69,82,84,89,85,73,79,80,91,93,92};    // q到\ 没有tabint[] line3 = {KeyEvent.VK_CAPS_LOCK,65,83,68,70,71,72,74,75,76,59,222,10}; // 大写到'int[] line4 = {16,90,88,67,86,66,78,77,44,46,47,38}; // shift到 向上int[] line5 = {17,18,32,18,17,37,40,39};    // ctrl到 >  不包括 fn、windowMap<Integer, String> uncharMap = new HashMap<Integer, String>(); // 特殊字符public KeyboardTest() {// 获取当前大小写boolean isUpper = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);System.out.println("当前是否大写:"+isUpper);// 模拟输入try {robot = new Robot();} catch (AWTException e) {// TODO Auto-generated catch blocke.printStackTrace();}//this.setLayout(null);int x = 20,y = 20 ,width = 60 , height = 40;text = new JTextField(); text.setBounds(x, y, 800, height);this.add(text);text.grabFocus();// 替换特殊字符initUnChar();// 添加从 33 - 126 的asciiint[][] keyint = new int[5][];keyint[0] = line1;keyint[1] = line2;keyint[2] = line3;keyint[3] = line4;keyint[4] = line5;y = y + height + 20;// load keysint startx = 0,cellspace = 5;loadKeys(line1,startx,cellspace,x, y, width, height);y = y + height + 20;// line2int[] tmpInt = new int[]{line2[0]}; // tabloadKeys(tmpInt,0,cellspace, x, y, width + width /2 , height);startx = x + width + width / 2 - cellspace * 2 ;tmpInt = new int[line2.length - 1];System.arraycopy(line2, 1, tmpInt, 0, tmpInt.length);loadKeys(tmpInt,startx ,cellspace, x, y, width, height);// line3y = y + height + 20;tmpInt = new int[]{line3[0]};loadKeys(tmpInt,0,cellspace, x, y, width * 2 , height);startx = x + width * 2 - cellspace * 2 ;tmpInt = new int[line3.length - 1];System.arraycopy(line3, 1, tmpInt, 0, tmpInt.length);loadKeys(tmpInt,startx,cellspace, x, y, width, height);// line4y = y + height + 20;tmpInt = new int[]{line4[0]};loadKeys(tmpInt,0,cellspace, x, y, width * 2 + width / 2 , height);startx = x + width * 2 + width / 2 - cellspace * 2 ;tmpInt = new int[line4.length - 1];System.arraycopy(line4, 1, tmpInt, 0, tmpInt.length);loadKeys(tmpInt,startx,cellspace, x, y, width, height);/**for(int i = 0;i < keyint.length;i++){for(int j = 0;j < keyint[i].length; j++){String showStr = uncharMap.get(keyint[i][j]); // 显示的字符if(showStr == null){showStr = String.valueOf((char) keyint[i][j]);}MyJButton jb = new MyJButton(showStr);jb.setBounds((x + width )* (j + 1) , y, width, height);jb.setFocusable(false); //   最关键的一句话 jb.setValue(keyint[i][j]); // jb.addActionListener(this);this.add(jb);}x = 20;y = y + height + 20;}*/}public static void main(String[] args) {JFrame frame = new JFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(1024, 800);//KeyboardTest kb = new KeyboardTest();frame.add(kb);frame.setVisible(true);}@Overridepublic void actionPerformed(ActionEvent e) {MyJButton jb = (MyJButton)e.getSource();int key = jb.getValue();System.out.println(key);robot.keyPress(key);robot.keyRelease(key);}// 初始化特殊字符 public void initUnChar(){uncharMap.put(192, "`");uncharMap.put(8, "退格");uncharMap.put(222, "'");uncharMap.put(KeyEvent.VK_CAPS_LOCK, "大/小写");uncharMap.put(10, "回车");uncharMap.put(16, "SHIFT");uncharMap.put(17, "CTRL");uncharMap.put(17, "ALT");uncharMap.put(38, "↑");uncharMap.put(37, "←");uncharMap.put(39, "→");uncharMap.put(40, "↓");}class MyJButton extends JButton{int value;public MyJButton(String showStr) {super(showStr);}public void setValue(int value) {this.value = value;}public int getValue() {return value;}}/*** @title loadKeys* @date 2018年4月18日* @param line* @param x* @param y* @param width* @param height* @description 加载键盘 */public void loadKeys(int[] line,int startx,int cell,int x,int y ,int width,int height){// line 1for(int j = 0;j < line.length; j++){String showStr = uncharMap.get(line[j]); // 显示的字符if(showStr == null){showStr = String.valueOf((char) line[j]);}MyJButton jb = new MyJButton(showStr);jb.setBounds(startx + x + (cell + width) * j  , y, width, height);jb.setFocusable(false); //   最关键的一句话 jb.setValue(line[j]); // jb.addActionListener(this);this.add(jb);}}
}

SWING中模拟键盘输入例子相关推荐

  1. Python中模拟键盘输入键位编号对照表

    以下是Python中模拟键盘常用的输入键位编号对照表: 小键盘的数字 键 键码 键 键码 键 键码 键 键码 A 65 F1 112 Backspace 8 0 96 B 66 F2 113 Tab ...

  2. c++如何模拟键盘输入

    在 C 语言中模拟键盘输入,可以使用函数 getch 或 getchar. getch 函数用于从控制台读取一个字符,但不显示在屏幕上.它是由库文件 "conio.h" 提供的. ...

  3. java中像scanf一样多个输入_VB模拟键盘输入的N种方法

    VB模拟键盘输入的N种方法http://bbs.csdn.net/topics/90509805hd378发表于: 2006-12-24 14:35:39用VB模拟键盘事件的N种方法 键盘是我们使用计 ...

  4. JavaScript - 模拟键盘输入支付密码

    JavaScript - 模拟键盘输入支付密码 Max.Bai 2016-12-29 0x00: 发生了什么事 我做自动化测试的时候,需要自动化在页面上输入这个密码,什么样子的,看下面: 有没有很像支 ...

  5. 使用C#模拟键盘输入

    假如你想做一个模拟键盘对当前的Active进程进行输入,该怎么办呢? 今天就介绍一个如何利用C#实现编程法模拟键盘输入 今天我们使用的是System.Windows.Forms.dll中的SendKe ...

  6. python模拟键盘输入字符_Python | 根据关键字符串遍历窗口 模拟键盘输入操作

    在自动化脚本测试某个程序的过程中,偶尔会因为文件读取操作弹出各种信息窗口,导致自动化脚本无法继续往下执行.为了解决这个问题,需要隔一段时间对信息窗口进行一次遍历,针对需要处理的窗口进行模拟键盘输入操作 ...

  7. php虚拟键盘输入,[问题] bash下如何模拟键盘输入

    你的位置: 问答吧 -> Shell -> 问题详情 [问题] bash下如何模拟键盘输入 我想要在bash下模拟键盘输入. 现在有两个实例. 1. 如果我在使用未配置sudo nopas ...

  8. python3模拟键盘输入_Python模拟键盘输入

    使用pynput库达到模拟键盘输入的目的(也可以进行鼠标模拟). 1.安装pynput库 pip install pynput 2.引入键盘所需类 from pynput.keyboard impor ...

  9. python如何模拟键盘输入_python 模拟键盘输入

    python 模拟键盘输入 一.PyUserInput安装 python3.5的PyMouse和PyKeyboard模块都集成到了PyUserInput模块中.在python3.5中,直接安装PyUs ...

最新文章

  1. Does the “LINQ to Objects” provider have built-in performance optimization?
  2. .NET获取机器信息
  3. centos6.8 yum mysql7_Centos6.8通过yum安装mysql5.7
  4. 文明使用计算机 教案,四年级信息技术下册 文明在我身边教案 华中师大版
  5. 全局替换字体,开源库更方便!!!
  6. WEB前端 Vue.js 的发展历史
  7. 全志和瑞芯微比较_哪家强_全志瑞芯微海思PK 智能芯片哪家强?
  8. c语言奇葩错误,6个奇葩的(hello,world)C语言版(转)
  9. avalon框架,简单的MVVM
  10. linux程序默认启动项,windows和linux双系统,设置默认启动项
  11. Maven学习总结(30)——Maven项目通用三级版本号说明
  12. MacBook 键盘出现故障,如何修复?
  13. Android基础入门教程——4.4.2 ContentProvider再探——Ducument Provider
  14. ERROR in Entry module not found: Error: Can‘t resolve ‘./src/index.js‘ in‘xxx.js‘
  15. 万圣节头像挂件微信小程序前端
  16. 实现Gateway网关统一Swagger入口
  17. 微信小程序实现保存影集和图片到相册
  18. 好消息,高清版谷歌卫星地图终于可以正常使用了
  19. 响应式极简新闻发布系统模板 v4.88
  20. 荣耀V30系列正式发布,它有满足你对5G手机的期待吗?

热门文章

  1. PDF文件如何在线翻译成中文
  2. SoftWare Engineering -- WEEK.3
  3. python cmd环境输入python打开应用商店解决
  4. 如何看笔记本电脑配置?
  5. Richard 外推法求梯度
  6. 问题分析——Maven打包后发版,静态资源找不到
  7. 合肥工业大学机器人技术五十六题
  8. windows 7 UEFI 启动模式安装,解决win7 64 setup会提示GPT分区不支持的问题
  9. 罗克韦尔AB PLC ControlLogix PLC的介绍和选型
  10. 扒一扒随机数(Random Number)的诞生历史