1

我正在开发一个 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) { }
});

所以现在确认阅读器只是标准键盘输入。

这是我为标签获得的示例:0006459027

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

4

3 回答 3

1

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

否则,您需要将 a 附加DocumentListener到文档基础字段并监视更改。

您需要决定如何最好地中断结果(因为您可能一次获得 RFID 的每个字母)。您可以监视文档的长度或javax.swing.Timer在短暂延迟后触发 which (您将在由 触发的每个更新事件上重置计时器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)) - 恕我直言

于 2012-08-30T02:51:57.810 回答
1

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

JFrame frame = new JFrame();

// frame setup

frame.addKeyListener(new KeyAdapter(){

    public void KeyPressed(KeyEvent ke)
    {

        System.out.println(ke);

    }

});

否则,您必须检查它触发哪种事件。

于 2012-08-30T02:53:24.870 回答
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);
}
于 2012-09-24T04:21:44.517 回答