2

ここで私の問題に関する良い Q/A を見つけましたが、正しいものを見つけることができませんでした。

バーコードを読み取り、スキャンしたコードをキーボード入力として送信するバーコード リーダーがあります。大丈夫です 簡単に入力をキャッチできます

browser.addKeyListener(new KeyAdapter() {   
    @Override public void keyPressed(KeyEvent e) {
        if(e.keyCode >=48 && e.keyCode <=57) {
            System.out.println("number caught");
        } 
    }
});

しかし、アプリケーションにはさらに多くの入力があるため、それがバーコード リーダーまたはキーボードのどちらで送信されているかを知る必要があります。「シーケンス」読み取りの長さを検証するコードにタイマーを追加することで実現できると思います。

私はそれを理解できません(つまり、その背後にあるロジックを意味します)、ロジックの一部が欠けています。

  1. ユーザーが何らかの情報を入力しています (英数字)
  2. ユーザーはバーコードリーダーを使用してバーコードを読み取りたい

keyListener がトリガーされた後など、タイマーを試し if(System.currentTimeMillis() - lastPressProcessed ??? 500) {ましたが、何かが足りないと思います。

補足: USB バーコードはコードを高速に読み取るため、キーストロークが非常に高速にエミュレートされます。バーコード全体が約 1 秒 + キャリー/r/n(enter押される) で書き込まれます。

sidenote2:バーコードは長さが異なるため、短時間で長さを読み取ることができず、ユーザー入力かバーコード入力かを判断できません (最大読み取り数は 13 +enterです)。

sidenote3:「バックグラウンド」で実行しようとしているバーコードの入力フィールドがありません。

トピックに関するロジック/疑似コードの提案を求めています。

私に非常に近い関連トピックはこことここにあります

ありがとうございました。

編集

深く考えた後、私は解決策を見つけました。この Q は、これが使用可能であると思われる別のユーザーのためにここに保持します。

ソリューション -- 回答に移動 + 編集

4

2 に答える 2

1

ここで私のソリューションをダウンロードできます:

http://jhead.hu/resource/java/general/BarcodeReader.java

次のコード サンプルは、その使用方法を示しています。新しいバーコードが識別されると、ActionEvent が生成され、getActionCommand() メソッドを介してバーコードを取得できます。パネルがアクティブでない場合は、文字をさらにフォーカス マネージャーに送信できます。

唯一の問題は、私のバーコード スキャナが文字を送信する速度が速すぎるため、文字ビットが混在する場合があることです。私はまだより良い解決策を持っていません。

public class PanelWithBarcodeReading extends javax.swing.JPanel implements ActionListener {

    private BarcodeReader barcodeReader = new BarcodeReader();

    public PanelWithBarcodeReading() {
        initComponents();
        barcodeReader.addActionListener(this);
        barcodeReader.setParent(this);
        KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(barcodeReader);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (SwingUtilities.getWindowAncestor(this).isActive()) {
            System.out.println("BARCODE='" + e.getActionCommand() + "'");
        } else {
            barcodeReader.dispatchLastBarcodeAsKeyEvents();
        }
    }

    ...
}
于 2013-07-29T20:27:36.650 に答える