2012-11-28 28 views
0

我想要做的是按下鍵盤的那一刻,無論寫在文本框上的什麼都會顯示在System.out.printLn()中。但是對於我製作的每種類型,只有在按下另一個鍵時纔會顯示。KeyListener - 爲什麼keyPressed方法延遲一種類型?

例如..我按'A'...然後會顯示一個空白區域。 我按'B'...然後會顯示'A'。 我按'C'...然後'AB'將會顯示。

我想要的是如果我按'A'...然後'A'將顯示...等 這有可能嗎?我也試過這個上的keyTyped(),但結果是一樣的..

這是我這麼短的代碼...

import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 

public class NewClass extends JFrame implements KeyListener{ 
JTextField tf = new JTextField(); 
NewClass(){ 
    this.setLayout(null); 
    tf.setBounds(50, 50, 200, 30); 

    add(tf); 
    tf.addKeyListener(this); 
} 

public static void main(String[] args) { 
    NewClass r = new NewClass(); 
    r.setVisible(true); 
    r.setSize(300, 200); 
    r.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

@Override 
public void keyTyped(KeyEvent e) { 
} 

@Override 
public void keyPressed(KeyEvent e) { 
    System.out.println(tf.getText()); 
} 

@Override 
public void keyReleased(KeyEvent e) { 
} 

} 

有什麼建議?在此先感謝:)

+1

如果您試圖過濾進入該字段的文本,請使用'DocumentFilter'而不是 – MadProgrammer

+0

@MadProgrammer yes。我將在後面實際使用它作爲搜索框。我會嘗試該文件過濾器。謝謝 – Katherine

回答

5

問題是keyPressed被稱爲之前 TextBox更新。

而不是

tf.addKeyListener(this); 

嘗試使用這樣的:

tf.getDocument().addDocumentListener(new DocumentListener() { 
public void changedUpdate(DocumentEvent e) { 
    printIt(); 
} 
public void removeUpdate(DocumentEvent e) { 
    printIt(); 
} 
public void insertUpdate(DocumentEvent e) { 
    printIt(); 
} 

public void printIt() { 
    System.out.println(tf.getText()); 
} 

你需要導入javax.swing.event.DocumentEventjavax.swing.event.DocumentListener

+0

謝謝^^ ... – Katherine