4

テキストフィールドに入力しながらテキスト領域を更新したいのですが、入力中に1キーストロークの遅延が発生します。つまり、キーを押すと前のキーが表示されます。これが私のスニペットです。

private void jTextField1KeyTyped(java.awt.event.KeyEvent evt)
{         
    String a = jTextField1.getText();
    jTextArea1.setText(a);            
}  
4

4 に答える 4

11

使用はお勧めしませんKeyListeners

ビアにを追加するだけDocumentListenerです。JTextField

textField.getDocument().addDocumentListener(new DocumentListener() {

            @Override
            public void insertUpdate(DocumentEvent de) {
            }

            @Override
            public void removeUpdate(DocumentEvent de) {
            }

            @Override
            public void changedUpdate(DocumentEvent de) {
            }
        });

各メソッド(、、および)のinsertUpdateremoveUpdatechangedUpdateは、単に呼び出しを入れて、JTextAreaviaのテキストを設定しsetText()ます。

textArea.setText(textField.getText());

これが私が作った例です:

import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class Test {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Test().createAndShowUI();
            }
        });
    }

    private void createAndShowUI() {
        final JFrame frame = new JFrame("Test");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        initComponents(frame);

        frame.setResizable(false);
        frame.pack();
        frame.setVisible(true);
    }

    private void initComponents(JFrame frame) {
        final JTextField jtf = new JTextField(20);
        final JTextArea ta = new JTextArea(20,20);

        ta.setEditable(false);

        jtf.getDocument().addDocumentListener(new DocumentListener() {

            @Override
            public void insertUpdate(DocumentEvent de) {
                ta.setText(jtf.getText());
            }

            @Override
            public void removeUpdate(DocumentEvent de) {
                ta.setText(jtf.getText());
            }

            @Override
            public void changedUpdate(DocumentEvent de) {
            //Plain text components don't fire these events.
            }
        });

        frame.getContentPane().add(jtf, BorderLayout.WEST);
        frame.getContentPane().add(ta, BorderLayout.EAST);
    }
}
于 2012-10-01T17:25:17.697 に答える
6

keyReleasedの代わりにイベントの下でkeyTypedそれを行う必要があり、それは必要に応じて機能します。

于 2012-10-01T17:03:20.337 に答える
0

TextAreaを更新する前に、TextFieldのイベントが処理されるまで待つ必要があります。TextFieldが新しい型付き文字の処理を完了する前に、コードはTextAreaを更新します。したがって、TextAreaに設定されたテキストは1キーストローク遅れています。

于 2012-10-01T16:59:28.093 に答える
0

メソッド内でメソッドを参照することにより、再帰を使用してみることができます(ただし、ループは避けてください)。

于 2012-10-01T17:11:00.873 に答える