2012-08-30 60 views
1

我正在研究Java應用程序並與充當鍵盤輸入設備的RFID閱讀器進行接口連接。如何在沒有文本字段的情況下監聽鍵盤輸入Java

該應用程序將用於員工時間跟蹤,因此員工不應該看到他/她的RFID標籤包含的代碼。

當前,應用程序打開一個jFrame,要求員工掃描他們的標籤。這是我想要聽取鍵盤輸入的地方。

所有的RFID標籤都是10位數字,所以我想用某種正則表達式來檢測卡片是否被掃描。

如果有人能指出我正確的方向,或提供一些代碼,我將不勝感激。

在此先感謝。

UPDATE:

我能夠加入到閱讀掃描儀的輸入下面我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) { } 
}); 

因此,現在確認閱讀器只是標準的鍵盤輸入。

這裏是什麼,我得到一個標籤的例子:0006459027

現在,最大的問題是,我怎麼走,我得到的人物,並檢測它是一個10位數的字串,並從有觸發一個事件來打開一個新的框架?

回答

1

首先,我會看到RFID閱讀器是否觸發ActionEvent在掃描標籤時被觸發。這將是最簡單的方法。

如果不成功,您需要將DocumentListener附加到文檔和監視器下方的字段以進行更改。

您需要決定如何最好地中斷結果(因爲您可能一次獲得RFID的每個字母)。你可以監測文件的長度還是有javax.swing.Timer其在短暫的延遲之後觸發(你會復位定時器由DocumentListener觸發每次更新事件)

退房

我建議看一看DocumentFilter,但是您對最終結果感興趣,而不是修改它。

更新了的DocumentListener例

// 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 ;) 
////// 

一個東西我會做,當你「觸發」代碼的事件是,一旦你從文本字段讀它,是明確的文本字段(JTextField.setText(null)) - IMHO

+0

更新的問題,感謝您的幫助迄今! –

+0

@MikeGeorge查看更新 – MadProgrammer

+0

太棒了!謝謝!只是添加在添加(字段),實際上工作沒有顯示字段。 –

1

如果RFID讀取器充當鍵盤輸入設備,嘗試用key events

JFrame frame = new JFrame(); 

// frame setup 

frame.addKeyListener(new KeyAdapter(){ 

    public void KeyPressed(KeyEvent ke) 
    { 

     System.out.println(ke); 

    } 

}); 

否則,您必須檢查它觸發哪種事件。

+0

在使用NetBeans生成擴展javax.swing.JFrame的「表單」之後執行此操作的任何提示? –

+0

我沒有NetBeans知識:/但是在任何你可以引用框架的地方,你可以按照我上面建議的方式添加一個'keyListener',只需要一些鍵就可以看到控制檯中的事件表示。 – moonwave99

+0

更新了問題,非常感謝您的幫助! –

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); 
} 
相關問題