2012-10-06 48 views
2

我已經試過的東西,但沒有得到結果在java swing中輸入文本字段後的自動標籤?

private void txtNameKeyPressed(java.awt.event.KeyEvent evt) {         
    String value = txtName.getText(); 
    digitcheck = value; 
    if ((evt.getKeyCode() >= KeyEvent.VK_1 && evt.getKeyCode() <= KeyEvent.VK_2)) 
     { 
      txtName.setEditable(true); 

      //If the Digit in JTextField exceeds two digits JTextField is deactivated 
      if(maxDigit(1)) 
      { 
       try { 
        txtName.setEditable(true); 
        txtAdd.setEnabled(true); 
        Robot robot = new Robot(); 
        robot.keyRelease(KeyEvent.VK_TAB); 
       } catch (AWTException ex) { 
        Logger.getLogger(Demo.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
      else 
      { 
       txtAdd.setEnabled(false); 
      } 
     } 
     else 
     { 
      txtAdd.setEnabled(false); 

     } 

}  

回答

2

我第一次通過是「爲什麼」,我的第二個雖然是「爲什麼不使用複選框?」

但我的是,而不是問題:P

首先。我不會使用KeyListener。這不是用於過濾文本組件的適當方法,您最好使用DocumentFilter,這樣您可以自動限制添加到文本字段的字符的數量和類型。

其次,我可能不會在這種情況下使用Robot,但這只是我。

我可能只是使用內置的transferFocus方法。更簡單,考慮到密鑰傳輸API ...

((AbstractDocument)field1.getDocument()).setDocumentFilter(new DocumentFilter() { 

    @Override 
    public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { 
     super.insertString(fb, offset, string, attr); 
    } 

    @Override 
    public void remove(FilterBypass fb, int offset, int length) throws BadLocationException { 
     super.remove(fb, offset, length); 
    } 

    @Override 
    public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { 
     if (text.startsWith("1") || text.startsWith("2")) { 

      field1.transferFocus(); 

     } 
     super.replace(fb, offset, length, text, attrs); 
    } 

}); 

看一看here了數的DocumentFilter

很好的例子
相關問題