1

私はJavaアプリケーションに取り組んでおり、キーボード入力デバイスとして機能するRFIDリーダーとインターフェースしています。

このアプリケーションは従業員の時間追跡に使用されるため、従業員は自分の RFID タグに含まれるコードを見る必要はありません。

現在、アプリケーションは従業員にタグをスキャンするよう求める jFrame を開きます。これは、キーボード入力をリッスンしたい場所です。

RFID タグはすべて 10 桁なので、可能であれば何らかの正規表現を使用して、カードがスキャンされたことを検出したいと考えています。

誰かが私を正しい方向に向けたり、コードを提供したりできれば、私は感謝しています。

前もって感謝します。

アップデート:

JFrame のコンストラクターに以下を追加することで、スキャナーの入力を読み取ることができました。

addKeyListener(new KeyListener(){
    @Override
    public void keyPressed(KeyEvent e){ System.out.print(e.getKeyChar());}
    @Override
    public void keyReleased(KeyEvent e) { }
    @Override
    public void keyTyped(KeyEvent e) { }
});

そのため、Reader が単なる標準のキーボード入力であることが確認されました。

タグに対して取得する例を次に示します: 0006459027

さて、大きな問題は、取得した文字を取得して、それが 10 桁の文字列であることを検出し、そこからイベントをトリガーして新しいフレームを開くにはどうすればよいかということです。

4

3 に答える 3

1

ActionEventまず、タグがスキャンされたときにRFID リーダーが起動するようにトリガーしているかどうかを確認します。これが最も簡単な方法です。

DocumentListenerそれができない場合は、ドキュメントの基礎となるフィールドに を添付し、変更を監視する必要があります。

結果を中断する最善の方法を決定する必要があります (一度に RFID の各文字を取得する可能性が高いため)。ドキュメントの長さを監視するかjavax.swing.Timer、少し遅れてトリガーすることができます(によってトリガーされる各更新イベントでタイマーをリセットしますDocumentListener

チェックアウト

もご覧になることをお勧めしDocumentFilterますが、変更するのではなく、最終結果に興味があります。

DocumentListener を使用した UPDATED の例

// In the classes variable decleration section...
private JTextField rfidField;

// In the classes constructor or UI init method...
rfidField = new JTextField(12);
rfidField.getDocument().addDocumentListener(new DocumentListener() {

    public void handleUpdate(DocumentEvent e) {

        if (e.getDocument().getLength() == 10) {

            System.out.println("Trigger me happy...");
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    rfidField.setText(null);
                }
            });

        }

    }

    @Override
    public void insertUpdate(DocumentEvent e) {
        handleUpdate(e);
    }

    @Override
    public void removeUpdate(DocumentEvent e) {
        handleUpdate(e);
    }

    @Override
    public void changedUpdate(DocumentEvent e) {
        handleUpdate(e);
    }
});

// Now don't forget to add the field to your forms container ;)
//////

コードイベントを「トリガー」するときに私が行うことの1つは、テキストフィールドから読み取った後、テキストフィールドをクリアすることです(JTextField.setText(null))-私見

于 2012-08-30T02:51:57.810 に答える
1

RFID リーダーがキーボード入力デバイスとして機能する場合は、キー イベントを試してください。

JFrame frame = new JFrame();

// frame setup

frame.addKeyListener(new KeyAdapter(){

    public void KeyPressed(KeyEvent ke)
    {

        System.out.println(ke);

    }

});

それ以外の場合は、どの種類のイベントが発生するかを確認する必要があります。

于 2012-08-30T02:53:24.870 に答える
0

私も同様の状況でしたが、バーコードスキャナーを使用していました。

DocumentListener私はすべてのシナリオを処理するカスタムに本当に一生懸命取り組みましたが、どれもうまくいきませんでした。

必死で、私はを追加しました、ActionListenerそしてそれはそれから非常にうまくいきました。

これがコードスナップショットです:

try {
    txtStockItemRef.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            System.out.println(txtStockItemRef.getText()); 
            DatabaseManager.peformStockItemLookupByBarcodeRef(txtStockItemRef.getText());
        } 
    }); 
} catch(Exception exc) {
    LiveCityRetailTools.handleExceptionWithUserMessage(exc);
}
于 2012-09-24T04:21:44.517 に答える