我正在研究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位数的字符串,并从那里触发一个事件来打开一个新的框架?
答案 0 :(得分:1)
首先,我会看到RFID阅读器是否在扫描标签时触发ActionEvent
被触发。这将是最简单的方法。
如果失败,您需要将DocumentListener
附加到基础文档的字段并监视更改。
您需要决定如何最好地中断结果(因为您可能一次获得RFID的每个字母)。您可以监控文档的长度,或者在短暂的延迟后触发javax.swing.Timer
(您在DocumentListener
触发的每个更新事件上重置计时器)
结帐
我建议您同时查看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)
) - 恕我直言
答案 1 :(得分:1)
如果RFID阅读器充当键盘输入设备,请尝试使用key events:
JFrame frame = new JFrame();
// frame setup
frame.addKeyListener(new KeyAdapter(){
public void KeyPressed(KeyEvent ke)
{
System.out.println(ke);
}
});
否则你必须检查它会触发哪种事件。
答案 2 :(得分:0)
我遇到了类似的情况,但是使用条形码扫描仪。
我真的在一个自定义的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);
}