title: Using an external class for handling bar code scanner input?
body: <p>I'm building a basic Point of Sale application and I've been looking for ways of having my main POS JFrame listen for bar code input. I found this code (slightly modified) posted by Cyrusmith, which looks like what I want but I don't know how to implement it in my JFrame. It looks like its intended to be a separate class, which is how I have it in my project currently. I asked my coworker and he doesn't know either.</p>
  
  <p>Thanks for your help.</p>
  
  <pre><code>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&lt;BarcodeListener&gt; listeners = new CopyOnWriteArrayList&lt;&gt;();
      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 &gt; THRESHOLD) {
                          barcode.delete(0, barcode.length());
                      }
  
                      lastEventTimeStamp = e.getWhen();
  
                      if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                          if (barcode.length() &gt;= 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);
      }
  }
  </code></pre>