0

私がやりたいのは、キーボードを押した瞬間です。テキストフィールドに書かれたものは何でも System.out.printLn() に表示されます。ただし、作成するすべてのタイプについて、別のキーを押した場合にのみ表示されます。

たとえば..「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) {
}

}

助言がありますか?前もって感謝します :)

4

1 に答える 1

5

問題は、TextBox が更新されるkeyPressedに呼び出されていることです。

それ以外の

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.DocumentEventますjavax.swing.event.DocumentListener

于 2012-11-28T04:22:06.797 に答える