我有一個條形碼掃描儀,並且在我的Java應用程序中,當使用條形碼掃描產品時,必須帶一個彈出窗口來顯示與數據庫中條形碼相關的所有信息。我沒有應用程序上的文本框,我必須在內部處理這部分。我該怎麼做呢 ?任何建議?我正在使用swing進行用戶界面。在沒有文本框的情況下從條形碼掃描儀獲取輸入
編輯
條碼掃描器是USB之一。如果我們掃描一些東西,它會將結果輸出到具有焦點的文本框中。但我沒有在打開的頁面上工作的文本框。我可以使用一些隱藏的文本框並閱讀其中的值嗎?
我有一個條形碼掃描儀,並且在我的Java應用程序中,當使用條形碼掃描產品時,必須帶一個彈出窗口來顯示與數據庫中條形碼相關的所有信息。我沒有應用程序上的文本框,我必須在內部處理這部分。我該怎麼做呢 ?任何建議?我正在使用swing進行用戶界面。在沒有文本框的情況下從條形碼掃描儀獲取輸入
編輯
條碼掃描器是USB之一。如果我們掃描一些東西,它會將結果輸出到具有焦點的文本框中。但我沒有在打開的頁面上工作的文本框。我可以使用一些隱藏的文本框並閱讀其中的值嗎?
由於條形碼掃描儀只是一個設備,在讀取每個條形碼後發送鍵碼和ENTER,我會使用一個關鍵聽衆。
final Frame frame = new Frame();
frame.setVisible(true);
frame.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER) {
// your code is scanned and you can access it using frame.getBarCode()
// now clean the bar code so the next one can be read
frame.setBarCode(new String());
} else {
// some character has been read, append it to your "barcode cache"
frame.setBarCode(frame.getBarCode() + e.getKeyChar());
}
}
});
這個問題在於用戶只需用鍵盤按下一些按鍵,然後按下ENTER鍵,應用程序會將其作爲捕獲的條形碼。此外,並非每個條形碼閱讀器都會發送ENTER後綴char –
由於無法通過frame.addKeyListener以獲取輸入我用它使用的KeyboardFocusManager這個工具類:
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<BarcodeListener>();
private long lastEventTimeStamp = 0L;
public BarcodeReader() {
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
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;
}
});
}
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);
}
}
非常好的解決方案,但是有些條形碼閱讀器默認情況下不會發送ENTER鍵後綴,而且如果您沒有發送ENTER,您的代碼我看不到任何方法來捕獲條形碼最後 –
以類似於@Cyrusmith解決一些方法,我創建了一個「證明概念'的解決方案(現在有幾個限制,但你被邀請去修復它們:))試圖解決在這篇文章中以前的解決方案的限制:
我不知道你問(反對票不是從我)的東西。 – Moonbeam
肯定需要更多的細節。條形碼掃描儀是您的應用程序還是第三方獨立應用程序的一部分?你需要什麼文本框?條形碼掃描器如何/應該/可以與您的應用程序進行通信? – bezmax
檢查我的編輯.. – Deepak