加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何使用JavaFX从条形码扫描仪读取输入

发布时间:2020-12-15 01:03:00 所属栏目:Java 来源:网络整理
导读:我有条形码扫描仪,我可以在我专注于文本字段时读取输入,而不像键盘那样有任何问题. 我的问题如何我可以读取条形码输入,如果我没有专注于文本字段,换句话说如何让事件监听器听取条码扫描器. 最佳答案 它应该类似于Java Swing解决方案presented here. 我假设来

我有条形码扫描仪,我可以在我专注于文本字段时读取输入,而不像键盘那样有任何问题.

我的问题如何我可以读取条形码输入,如果我没有专注于文本字段,换句话说如何让事件监听器听取条码扫描器.

最佳答案
它应该类似于Java Swing解决方案presented here.

我假设来自条形码扫描仪的最终字符是ENTER.如果没有,您必须检查如何知道条形码何时完成,例如通过预期的长度或通过测试关键事件或其他之间的总计时间.

条形码扫描器的KeyEvents应该很快,因此两个事件之间的时间应该相当短.要过滤掉手动输入,如果事件太慢,则会重置StringBuffer.

在KeyListener中,您现在可以实现此方法:

private final StringBuffer barcode = new StringBuffer();
private long lastEventTimeStamp = 0L;

// ...

public void keyTyped(KeyEvent keyEvent) {
    long now = Instant.now().toEpochMilli();

    // events must come fast enough to separate from manual input
    if (now - this.lastEventTimeStamp > this.threshold) {
        barcode.delete(0,barcode.length());
    }
    this.lastEventTimeStamp = now;

    // ENTER comes as 0x000d
    if (keyEvent.getCharacter().charAt(0) == (char) 0x000d) {
        if (barcode.length() >= this.minBarcodeLength) {
            System.out.println("barcode: " + barcode);
        }
        barcode.delete(0,barcode.length());
    } else {
        barcode.append(keyEvent.getCharacter());
    }
    keyEvent.consume();
}

这只是一个粗略的实现,可能需要一些微调,但我已经在一个用于GridPane的FXML控制器中测试它,而对于条形码扫描器,我有它的工作原理.

注意:KeyEvent.KEY_TYPED does not have the KeyCode set,所以你不能这样做:

if (event.getCode().equals(KeyCode.ENTER)) {
//...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读