テキストフィールドに入力しながらテキスト領域を更新したいのですが、入力中に1キーストロークの遅延が発生します。つまり、キーを押すと前のキーが表示されます。これが私のスニペットです。
private void jTextField1KeyTyped(java.awt.event.KeyEvent evt)
{
String a = jTextField1.getText();
jTextArea1.setText(a);
}
テキストフィールドに入力しながらテキスト領域を更新したいのですが、入力中に1キーストロークの遅延が発生します。つまり、キーを押すと前のキーが表示されます。これが私のスニペットです。
private void jTextField1KeyTyped(java.awt.event.KeyEvent evt)
{
String a = jTextField1.getText();
jTextArea1.setText(a);
}
使用はお勧めしません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) {
}
});
各メソッド(、、および)のinsertUpdate
中removeUpdate
にchangedUpdate
は、単に呼び出しを入れて、JTextArea
viaのテキストを設定し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);
}
}
keyReleased
の代わりにイベントの下でkeyTyped
それを行う必要があり、それは必要に応じて機能します。
TextAreaを更新する前に、TextFieldのイベントが処理されるまで待つ必要があります。TextFieldが新しい型付き文字の処理を完了する前に、コードはTextAreaを更新します。したがって、TextAreaに設定されたテキストは1キーストローク遅れています。
メソッド内でメソッドを参照することにより、再帰を使用してみることができます(ただし、ループは避けてください)。