如何在没有Text Field Java的情况下监听键盘输入

我正在研究Java应用程序并与作为键盘输入设备的RFID阅读器连接。

该应用程序将用于员工时间跟踪,因此员工不应该看到他/她的RFID标签包含的代码。

目前,该应用程序打开一个jFrame,要求员工扫描其标签。 这是我想听键盘输入的地方。

所有RFID标签都是10位数字,所以我想使用某种正则表达式来检测卡片扫描的可能性。

如果有人能指出我正确的方向,或贡献一些代码,我将不胜感激。

提前致谢。

更新:

通过将以下内容添加到我的JFrame的构造函数中,我能够读取扫描程序的输入。

addKeyListener(new KeyListener(){ @Override public void keyPressed(KeyEvent e){ System.out.print(e.getKeyChar());} @Override public void keyReleased(KeyEvent e) { } @Override public void keyTyped(KeyEvent e) { } }); 

所以现在确认Reader只是标准键盘输入。

以下是我为标记获取的示例:0006459027

现在,最大的问题是,我如何获取我得到的字符,并检测到它是一个10位数的字符串,并从那里触发事件以打开一个新的框架?

首先,我会看到RFID阅读器是否在扫描标签时触发了一个ActionEvent 。 这将是最简单的方法。

如果不这样做,您需要将DocumentListener附加到基础文档的字段并监视更改。

您需要决定如何最好地中断结果(因为您可能一次获得RFID的每个字母)。 您可以监视文档的长度或者有一个javax.swing.Timer ,它会在短暂的延迟后触发(您在由DocumentListener触发的每个更新事件上重置计时器)

查看

  • JTextField.addActionListener
  • JTextField.getDocument()。addDocumentListener

我建议你看一下DocumentFilter ,但是你对最终结果感兴趣,而不是修改它。

使用DocumentListener示例更新

 // In the classes variable decleration section... private JTextField rfidField; // In the classes constructor or UI init method... rfidField = new JTextField(12); rfidField.getDocument().addDocumentListener(new DocumentListener() { public void handleUpdate(DocumentEvent e) { if (e.getDocument().getLength() == 10) { System.out.println("Trigger me happy..."); SwingUtilities.invokeLater(new Runnable() { public void run() { rfidField.setText(null); } }); } } @Override public void insertUpdate(DocumentEvent e) { handleUpdate(e); } @Override public void removeUpdate(DocumentEvent e) { handleUpdate(e); } @Override public void changedUpdate(DocumentEvent e) { handleUpdate(e); } }); // Now don't forget to add the field to your forms container ;) ////// 

当你“触发”代码事件时,我会做的一件事是,一旦你从文本字段中读取它,就会清除文本字段( JTextField.setText(null) ) – 恕我直言

如果RFID阅读器充当键盘输入设备,请尝试使用关键事件 :

 JFrame frame = new JFrame(); // frame setup frame.addKeyListener(new KeyAdapter(){ public void KeyPressed(KeyEvent ke) { System.out.println(ke); } }); 

否则你必须检查它发射的事件类型。

我在类似的情况下,但使用条形码扫描仪。

我真的在一个自定义的DocumentListener上努力工作,它将处理所有场景,但没有一个工作。

出于绝望,我添加了一个ActionListener ,然后它运行得非常好。

这是一个代码快照:

 try { txtStockItemRef.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { System.out.println(txtStockItemRef.getText()); DatabaseManager.peformStockItemLookupByBarcodeRef(txtStockItemRef.getText()); } }); } catch(Exception exc) { LiveCityRetailTools.handleExceptionWithUserMessage(exc); }