2014-04-02 29 views
1

我想觸發Java swing中的鍵釋放事件。如何在java swing中觸發keyReleased事件

txtEmailId.addKeyListener(new KeyAdapter() { 
      // override keyReleased listener on the Email TextField 
      @Override 
      public void keyReleased(KeyEvent e) { 

           System.out.println("ok"); 
      } 
     }); 

以上成功運行現在我想txtEmailId.setText("hello");它手動如何可能後打電話到該事件的keyReleased代碼?

+1

你意味着如何手動觸發代碼的keyReleased? –

+0

是的,它有多可能? –

+0

您無法以編程方式調用keyReleased,請檢查[Documentation](http://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyListener.html#keyReleased(java.awt.event.KeyEvent )) –

回答

2

而不是KeyAdapter使用DocumentListener。嘗試下面的例子:

import javax.swing.JFrame; 
import javax.swing.JTextField; 
import javax.swing.event.DocumentEvent; 
import javax.swing.event.DocumentListener; 
import javax.swing.text.BadLocationException; 

public class TestFrame extends JFrame{ 

    public TestFrame(){ 
     init(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
     setVisible(true); 
    } 

    private void init() { 
     JTextField f = new JTextField(); 
     f.getDocument().addDocumentListener(new DocumentListener() { 

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

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

      @Override 
      public void changedUpdate(DocumentEvent e) { 
       validate(e); 
      } 

      private void validate(DocumentEvent e) { 
       try { 
        String text = e.getDocument().getText(0, e.getDocument().getLength()); 
        if(text.equals("hello")){ 
         System.out.println("ok"); 
        } 
       } catch (BadLocationException e1) { 
        e1.printStackTrace(); 
       } 
      } 
     }); 
     f.setText("hello"); 
     add(f); 
    } 

    public static void main(String... s){ 
     new TestFrame(); 
    } 

} 
+0

這是如何滿足我的問題? –

+0

我建議你另外一種方法來在你的'JTextField'上手動觸發事件,而不需要手動觸發事件。 – alex2410

+1

@ user3363563不建議使用文本組件的KeyListener,因爲如果您在關鍵事件通知期間嘗試並修改字段,則在事件可能在到達您的偵聽器之前它們可能會被使用,或者導致突變錯誤,但它也不會考慮當文本持續到領域。 DocumentListener是用於監控對字段/文檔內容的更改以及DocumentFilter用於在提交到文檔/字段之前過濾內容的推薦理念 – MadProgrammer