没有Java文本字段,如何收听键盘输入

没有Java文本字段,如何收听键盘输入,java,keyboard,rfid,Java,Keyboard,Rfid,我正在开发一个Java应用程序,并与一个充当键盘输入设备的RFID阅读器进行接口 该应用程序将用于员工时间跟踪,因此员工不应看到其RFID标签包含的代码 目前,应用程序打开一个jFrame,要求员工扫描他们的标签。这是我想要听键盘输入的地方 所有的RFID标签都是10位数字,所以如果可能的话,我想使用某种正则表达式来检测何时扫描一张卡 如果有人能为我指出正确的方向,或提供一些代码,我将不胜感激 提前谢谢 更新: 通过将以下内容添加到JFrame的构造函数中,我能够读取扫描仪的输入 addKeyL

我正在开发一个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位字符串,然后从那里触发一个事件以打开一个新帧?

首先,我要看看RFID阅读器是否在扫描标签时触发一个
动作事件。这将是最简单的方法

否则,您需要将
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)
)-IMHO

如果RFID读卡器充当键盘输入设备,请尝试:


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

我也遇到过类似的情况,但使用的是条形码扫描仪

我在一个定制的
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);
}

在使用NetBeans生成扩展javax.swing.JFrame的“表单”之后,有没有实现这一点的提示?我不知道NetBeans的知识:/但是在任何可以引用该框架的地方,您都可以按照我上面建议的方式添加一个
keyListener
,只要按下一些键,您就会在控制台中看到事件表示。@moonwave99我会非常小心地使用
KeyListener
,虽然没有完全错误,但很容易理解circumvent@MadProgrammer我同意,我更关心的是让这种塑料材料工作。应该有办法截获设备的事件。太好了!谢谢刚刚添加到add(字段)中,实际上没有显示该字段。@mikegorge该字段的添加可以在任何时候发生,与答案无关(尽管这仍然是一个好主意;))再问一个问题,我如何重新设置DoucumentListener,以便在需要时扫描另一个标记?@mikegorge这是我文章的最后一段。从文本字段读取RFID后,将其文本设置为null或空的
字符串
-
JTextField.setText(null)
,如果在handleUpdate方法中执行此操作,则会将文档重置为空文档:“非静态方法setText(字符串)无法从静态上下文引用”
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);
}