2012-10-06 3 views
2

내가 뭔가를 시도했지만입니다 통해자바 스윙에서 텍스트 입력 후 자동 탭?

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을 사용하지 않을 것이지만 그것은 나뿐입니다.

아마도 inbuilt transferFocus 메서드를 사용합니다. 그것은

((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); 
    } 

}); 

DocumentFilter

우수 사례의 수에 대한 here에서보세요 ... 간단하고 계정 키 전송 API로한다
관련 문제