我想在文本字段敲字更新我的文字區域,但我得到1次擊鍵的延遲,同時打字即當我按一個鍵之前的關鍵是displayed.Here是我的片段而在文本字段中鍵入同時更新文本區域
private void jTextField1KeyTyped(java.awt.event.KeyEvent evt)
{
String a = jTextField1.getText();
jTextArea1.setText(a);
}
我想在文本字段敲字更新我的文字區域,但我得到1次擊鍵的延遲,同時打字即當我按一個鍵之前的關鍵是displayed.Here是我的片段而在文本字段中鍵入同時更新文本區域
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
的文本通過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
,也將努力爲您的需要。
我同意這樣可以解決他的問題,但是如果按下按鍵,他也可能想要一個循環開始。你可能只需要一個簡短的等待()或睡眠()的循環 – tcannon91
你可以嘗試通過引用方法內部的方法來使用遞歸(儘管避免循環)。
你往往比風改變其方向改變公認的答案。 –
@丹其實我想接受這兩個答案,但不能現在最終我堅持1. – harry4
沒問題,只是有趣的是,你改變了接受的答案4次。 –