我想在输入文本字段的同时更新我的文本区域,但是我在输入时延迟了 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
via 中添加一个:
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 中设置的文本是后面的一个键击。
您可以通过在方法中引用方法来尝试使用递归(但要避免循环)。