2015-12-09 34 views
0

目前我使用這個代碼,但它不能正常工作,如果我刪除了1或2或3位出17,但成功的圖標仍然可見所有無效的JTextField。只有13或17位有效,除非(13和17)

@Override 
     public void keyReleased(KeyEvent e) { 
      if(Strings.isNullOrEmpty(txtVID.getText())){ 
       lblIDValidation.setIcon(null); 
       isVIDValid= false; 
      } 
     } 
     @Override 
     public void keyPressed(KeyEvent e) { 
       if(txtVID.getText().length()==16 || txtVID.getText().length()==12 || txtVID.getText().length()==17){ 
        lblIDValidation.setIcon(createImageIcon(CommonUtil.success)); 
        isVIDValid= true; 
        return; 
       } 
       lblIDValidation.setIcon(createImageIcon(CommonUtil.danger)); 
       isVIDValid= false; 
     } 
+1

像上所述受試者每一個其他的問題,使用一個'DocumentFilter',參見[實施文檔濾波器](http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#過濾器)和[DocumentFilter示例](http://www.jroller.com/dpmihai/entry/documentfilter)以獲得更多示例 – MadProgrammer

+1

或者,如果您希望監視字段的更改,請使用「DocumentListener」,請參閱[Listening for Changes on一個文檔](http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#doclisteners)瞭解更多詳情。無論如何,'KeyListener'是一個糟糕的選擇(通常,但特別是對於文本組件) – MadProgrammer

+0

這個問題和內容描述得很差。參見[mcve] –

回答

3

一個KeyListener是一個糟糕的選擇,一般,但espcially對於文本組件,除了不保證其中的關鍵事件可能會傳送到您的收聽這將改變在不同平臺上的行爲順序,他們不在使用setText或用戶將字體粘貼到字段時會發生什麼情況。

一個更好的選擇是使用DocumentListener,例如

JTextField field = new JTextField(20); 
    field.getDocument().addDocumentListener(new DocumentListener() { 

     public void verify() { 
      int length = field.getText().trim().length(); 
      if (length >= 16 && length <= 17) { 
       field.setBackground(null); 
      } else { 
       field.setBackground(Color.RED); 
      } 
     } 

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

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

     @Override 
     public void changedUpdate(DocumentEvent e) { 
      verify(); 
     } 
    }); 
    field.setText(" "); 
    field.setText(null); 

Listening for Changes on a Document更多細節

+0

非常感謝,它工作正常。我已經使用了您的建議並在我的代碼中實施。 有美好的生活。 –

0

現在它的正常工作....如果任何人有問題,使用這個代碼只是評論如下。

lblIDValidation.setIcon(null); 
    txtVID.getDocument().addDocumentListener(new DocumentListener() { 
     public void verify() { 
      int length = txtVID.getText().trim().length(); 
      if (length == 17 || length == 13) { 
       lblIDValidation.setIcon(createImageIcon(CommonUtil.success)); 
       isVIDValid= true; 
      } else { 
       lblIDValidation.setIcon(createImageIcon(CommonUtil.danger)); 
       isVIDValid= false; 
      } 
     } 

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

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

     @Override 
     public void changedUpdate(DocumentEvent e) { 
      verify(); 
     } 
    }); 
    txtVID.setText(null); 
+0

其中CommonUtil.danger或成功的png圖片。 –

相關問題