gpt4 book ai didi

java - 使用外部类来处理条形码扫描仪输入?

转载 作者:行者123 更新时间:2023-12-02 06:06:48 24 4
gpt4 key购买 nike

我正在构建一个基本的销售点应用程序,并且一直在寻找让我的主 POS JFrame 监听条形码输入的方​​法。我发现 Cyrusmith 发布的这段代码(稍作修改),它看起来像我想要的,但我不知道如何在我的 JFrame 中实现它。它看起来像是一个单独的类,这就是我目前在我的项目中的方式。我问了同事,他也不知道。

感谢您的帮助。

package barcode;

import java.awt.KeyEventDispatcher;
import java.awt.KeyboardFocusManager;
import java.awt.event.KeyEvent;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

/**
* Listens for bar code input and puts it into a String Buffer.
*
*/
public class BarcodeReader {

private static final long THRESHOLD = 100;
private static final int MIN_BARCODE_LENGTH = 8;

public interface BarcodeListener {

void onBarcodeRead(String barcode);
}
private final StringBuffer barcode = new StringBuffer();
private final List<BarcodeListener> listeners = new CopyOnWriteArrayList<>();
private long lastEventTimeStamp = 0L;

public BarcodeReader() {

KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
try {
if (e.getID() != KeyEvent.KEY_RELEASED) {
return false;
}

if (e.getWhen() - lastEventTimeStamp > THRESHOLD) {
barcode.delete(0, barcode.length());
}

lastEventTimeStamp = e.getWhen();

if (e.getKeyCode() == KeyEvent.VK_ENTER) {
if (barcode.length() >= MIN_BARCODE_LENGTH) {
fireBarcode(barcode.toString());
}
barcode.delete(0, barcode.length());
} else {
barcode.append(e.getKeyChar());
}
return false;
} catch (UnsupportedOperationException err) {
throw new UnsupportedOperationException(err); //To change body of generated methods, choose Tools | Templates.
}

}
});

}

protected void fireBarcode(String barcode) {
for (BarcodeListener listener : listeners) {
listener.onBarcodeRead(barcode);
}
}

public void addBarcodeListener(BarcodeListener listener) {
listeners.add(listener);
}

public void removeBarcodeListener(BarcodeListener listener) {
listeners.remove(listener);
}
}

最佳答案

大多数条形码阅读器基本上将代码直接注入(inject)键盘缓冲区。因此,如果您有一个具有键盘焦点的 JTextField,则生成的文本将直接“输入”到其中......不涉及任何魔法。

如果您“想要”使用此阅读器,那么您将需要创建一个实例...

BarcodeReader reader = new BarcodeReader();

向其注册一个 BarcodeListener...

reader.addBarcodeListener(new BarcodeListener() {
public void onBarcodeRead(String barcode) {
// Respond to the event, like, I don't know,
// set the text of text field :P
}
});

但对我来说,这似乎是很多额外的工作 - 但这只是我......

所以,是的,它应该是一个单独的类。根据您想要实现的目标,您可以将其转储到当前代码库中的某个位置,将类导入到源代码中,然后像使用其他类一样使用它。同样,您可以为其创建一个单独的库,但这仅意味着您需要将其包含在类路径中以进行编译和运行时执行...

关于java - 使用外部类来处理条形码扫描仪输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22212067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com