2011-07-18 37 views
9

Tôi có máy quét mã vạch và trong ứng dụng java của mình, tôi phải hiển thị tất cả thông tin liên quan đến mã vạch từ cơ sở dữ liệu khi sản phẩm được quét bằng mã vạch. Tôi không có hộp văn bản trên ứng dụng tôi phải xử lý phần này trong nội bộ. Làm thế nào để tôi làm điều này ? Bất kì lời đề nghị nào ? Tôi đang sử dụng swing cho giao diện người dùng.Nhận đầu vào từ máy quét mã vạch nội bộ mà không cần hộp văn bản

EDIT

Máy quét mã vạch là USB. Nếu chúng ta quét một cái gì đó nó sẽ xuất kết quả vào hộp văn bản có tiêu điểm. Nhưng tôi không có hộp văn bản nào đang hoạt động trên trang được mở. Tôi có thể làm việc với một số hộp văn bản ẩn và đọc giá trị ở đó không?

+0

Tôi không chắc chắn những gì bạn đang yêu cầu (xuống bỏ phiếu không phải từ tôi). – Moonbeam

+0

Chắc chắn đòi hỏi nhiều chi tiết hơn. Máy quét mã vạch có phải là một phần của ứng dụng của bạn hoặc ứng dụng độc lập của bên thứ ba không? Bạn cần trường textbox để làm gì? Máy quét mã vạch/nên/có thể giao tiếp với ứng dụng của bạn như thế nào? – bezmax

+1

kiểm tra chỉnh sửa của tôi .. – Deepak

Trả lời

5

Vì máy quét mã vạch chỉ là thiết bị gửi mã phím và ENTER sau khi đọc từng mã vạch, tôi sẽ sử dụng trình nghe khóa.

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()); 
     } 
    } 

}); 
+1

Vấn đề với điều này là người dùng chỉ có thể nhấn một số phím bằng bàn phím và sau đó nhấn ENTER, và ứng dụng sẽ coi đó là mã vạch đã chụp. Hơn nữa, không phải mọi đầu đọc mã vạch đều gửi một hậu tố ENTER –

5

Kể từ khi đã không thể có được đầu vào thông qua frame.addKeyListener Tôi đã sử dụng lớp tiện ích này trong đó sử dụng 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); 
} 

} 
+0

Giải pháp rất tốt, nhưng có một số đầu đọc mã vạch không gửi hậu tố khóa ENTER theo mặc định, và với mã của bạn, tôi không thấy cách nào để chụp mã vạch nếu ENTER không được gửi cuối cùng –

0

Trong một số cách tương tự như giải pháp @Cyrusmith Tôi đã tạo ra một 'bằng chứng về khái niệm 'giải pháp (với một số hạn chế ngay bây giờ, nhưng bạn được mời để sửa chữa chúng :)) cố gắng để giải quyết những hạn chế về các giải pháp trước đó trong bài đăng này:

  • Nó hỗ trợ đầu đọc mã vạch t mũ không gửi ENTER ở cuối chuỗi mã vạch.
  • Nếu tiêu điểm hiện tại trên thành phần văn bản xoay và mã vạch được chụp, mã vạch không đến được thành phần văn bản và chỉ cho trình nghe mã vạch.

Xem https://stackoverflow.com/a/22084579/320594

Các vấn đề liên quan