扫描枪自带回车的Java模拟
2015-11-19 23:01
525 查看
[可以作为《编程导论(Java)·9.3.4键盘事件处理》的补充材料,GUI部分内容太多,同学们需要做一些例程自学各种控件的使用——yqj2065是木有心思在书中或上课时讲这些东西的
。GUI部分搞清楚好莱坞原则/观察者模式、编写几个事件处理demo就可以了,其他请大家自学。]
扫描枪读取的数据,通常自带回车。开发相关系统时,需要编写一个模拟扫描枪的QRReaderDialog。
一个小例子:在Netbeans中编写的InputDemo
QRReaderDialog是一个简单的对话框,点击其上的Read once按钮,产生一条字符串——表示读取的二维码信息。MyJTextField将作为Read once按钮的Action事件监听器。
设计MyJTextField时,就有两个选项:MyJTextField在setText(qrCode)后是否自带回车。
如果自带回车,装箱操作窗口将监听MyJTextField的Action事件或Key事件;
不自带回车,装箱操作窗口将监听MyJTextField的内容变化事件,即对MyJTextField对象inputTextField,调用下面的语句:
inputTextField.getDocument().addDocumentListener(new MyDocumentListenerImpl());
两种方式都可以达到目的,前者使用java.awt.Robot,后者要自定义MyDocumentListener implements javax.swing.event.DocumentListener ,并给出其实现类。
。GUI部分搞清楚好莱坞原则/观察者模式、编写几个事件处理demo就可以了,其他请大家自学。]
扫描枪读取的数据,通常自带回车。开发相关系统时,需要编写一个模拟扫描枪的QRReaderDialog。
1.java.awt.Robot
JTextField作为数据接受控件,在它上面按下Enter键,可以监听Action事件或Key事件;而“按下Enter键”,就需要用到java.awt.Robot。一个小例子:在Netbeans中编写的InputDemo
package demo; import com.sun.glass.events.KeyEvent; import java.awt.Robot; /** * * @author yqj2065 */ public class InputDemo extends javax.swing.JFrame { private final Robot robot; public InputDemo() throws Exception { robot = new Robot(); //创建一个robot对象 initComponents(); } public void keyPress(int key) { robot.delay(50); robot.keyPress(key); robot.keyRelease(key); } private void initComponents() { //略 } private void input_TextFieldKeyPressed(java.awt.event.KeyEvent evt) { if (KeyEvent.VK_ENTER == evt.getKeyCode()) { KeyPressed_Label.setText(input_TextField.getText()); } } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { int i = (int) (Math.random() * 10000000) + 1; String str = i + "二维码数据"; input_TextField.setText(str); input_TextField.requestFocus(); this.keyPress(java.awt.event.KeyEvent.VK_ENTER); } private void input_TextFieldActionPerformed(java.awt.event.ActionEvent evt) { ActionPerformed_Label.setText(input_TextField.getText()); } /** * @param args the command line arguments */ public static void main(String args[]) {//略 } // Variables declaration - do not modify private javax.swing.JLabel ActionPerformed_Label; private javax.swing.JLabel KeyPressed_Label; private javax.swing.JTextField input_TextField; private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; // End of variables declaration }
2.QRReaderDialog与MyJTextField
QRReaderDialog是一个简单的对话框,点击其上的Read once按钮,产生一条字符串——表示读取的二维码信息。MyJTextField将作为Read once按钮的Action事件监听器。
设计MyJTextField时,就有两个选项:MyJTextField在setText(qrCode)后是否自带回车。
如果自带回车,装箱操作窗口将监听MyJTextField的Action事件或Key事件;
不自带回车,装箱操作窗口将监听MyJTextField的内容变化事件,即对MyJTextField对象inputTextField,调用下面的语句:
inputTextField.getDocument().addDocumentListener(new MyDocumentListenerImpl());
两种方式都可以达到目的,前者使用java.awt.Robot,后者要自定义MyDocumentListener implements javax.swing.event.DocumentListener ,并给出其实现类。
package qrms.ui.util; import javax.swing.event.DocumentEvent; /** * * @author yqj2065 */ public abstract class MyDocumentListener implements javax.swing.event.DocumentListener { public abstract void textChangedHandle(); @Override public void insertUpdate(DocumentEvent e) { textChangedHandler(); } @Override public void removeUpdate(DocumentEvent e) { } @Override public void changedUpdate(DocumentEvent e) { } }
相关文章推荐
- JavaWeb---框架SpringMvc+Mybatis开发项目第二季(共三季)
- 《JAVA 程序性能优化》读书笔记:木桶原理与性能瓶颈
- 简单选择排序Java实现与分析
- java取得当前工作目录
- Java字符串String中contains与indexOf的区别
- Set接口
- Java中设置方法执行的超时时间
- HashMap死循环问题分析
- java基础 7种反转方法 charAt()等方法
- java连接mysql与简单操作mysql的增删改查简单例子
- 4. Spring 4.2.3前瞻-使用@Order调整配置类加载顺序
- 关于java实例化学习
- java静态和非静态代码块的执行顺序
- 3. Spring 4.2.3前瞻-@Import注解的升级
- Java异常分类
- 2. Spring 4.2.3前瞻-对java8默认方法(default method)定义Bean的支持
- MyEclipse提示键配置、提示快捷键、提示背景色、关键字颜色、代码显示、编...
- gradle eclipse下构建ssh2项目
- 从头认识java-9.10 Map
- LeetCode第一题Two Sum