2013-10-29 43 views
1

我想在文本框內按下某些內容時停用組件,並在您擦除所有內容並將其變爲空時重新激活組件。但是,這似乎並沒有工作:KeyListener如何重新激活組件?

idTF.addKeyListener(new KeyAdapter() { 
    public void keyTyped(KeyEvent e) {  
     char ch = e.getKeyChar(); 

     if (Character.charCount(ch)>0) { 
      searchF.setEditable(false); 
      rangeTF1.setEditable(false); 
      rangeTF2.setEditable(false); 
      ageTF.setEditable(false); 
      addressTF.setEditable(false); 
      crimebox.setEditable(false); 
      countrybox.setEditable(false); 
      genderbox.setEditable(false); 
     } else if (Character.charCount(ch)==0) { 
      searchF.setEditable(true); 
      rangeTF1.setEditable(true); 
      rangeTF2.setEditable(true); 
      ageTF.setEditable(true); 
      addressTF.setEditable(true); 
      crimebox.setEditable(true); 
      countrybox.setEditable(true); 
      genderbox.setEditable(true);    
     } 
    } 
}); 
+0

附註:您應該將所有的隱藏/顯示邏輯放入一個void函數中,並將一個布爾值'hide/show'傳遞給所述函數。 –

+1

'Character.charCount(...)'不能等於'0'。它告訴你需要多少'char'來表示一個給定的Unicode代碼點 - 在你的情況下,實際上被按下的那個鍵* - 對於任何實際的字符顯然永遠不會小於'1'。你永遠不會檢查'idTF'的內容。 – millimoose

回答

1

正確的代碼是這樣的:

class MyDocumentListener implements DocumentListener { 

    public void insertUpdate(DocumentEvent e) { 

     System.out.println(e.getType()); 
     searchF.setEditable(false); 
     rangeTF1.setEditable(false); 
     rangeTF2.setEditable(false); 
     ageTF.setEditable(false); 
     addressTF.setEditable(false); 
     crimebox.setEnabled(false); 
     countrybox.setEnabled(false); 
     genderbox.setEnabled(false); 
    } 

    public void removeUpdate(DocumentEvent e) { 

     if(idTF.getText().isEmpty()){ 

     searchF.setEditable(true); 
     rangeTF1.setEditable(true); 
     rangeTF2.setEditable(true); 
     ageTF.setEditable(true); 
     addressTF.setEditable(true); 
     crimebox.setEnabled(true); 
     countrybox.setEnabled(true); 
     genderbox.setEnabled(true); 
     } 

    } 

    public void changedUpdate(DocumentEvent e) { 
    } 


} 

謝謝@Maroun Maroun

+2

更新你的代碼到這裏:http://pastebin.com/eeym1MrU :) –

1

你可以有一個DocumentListener

DocumentListener documentListener = new DocumentListener() { 
    @Override 
    public void changedUpdate(DocumentEvent arg0) { 
    enableOrDisable(arg0); 
    } 
    @Override 
    public void insertUpdate(DocumentEvent arg0) { 
     enableOrDisable(arg0); 
    } 
    @Override 
    public void removeUpdate(DocumentEvent arg0) { 
     enableOrDisable(arg0); 
    } 

    private void enableOrDisable(arg0);(DocumentEvent arg0) { 
     //Code to enable/disable button 
    } 
}; 

而這個監聽器添加到你想要的字段:修改

myComponent.getDocument().addDocumentListener(documentListener); 
+0

工作!謝謝!我現在唯一的問題是,如果我不用backspace清除所有東西,但我選擇所有和CTRL + X(切割)組件不啓用..... – Lambros

+0

他們應該是。這是'DocumentListener' .. – Maroun

+0

的整點......他們不...... – Lambros