Jam*_*mes 4 java swing awt keylistener jtextfield
我有以下代码,用于每次按下一个键时更新JTextArea,焦点位于JTextField中,并将JTextField的内容追加到JTextArea中的新行.
我的问题是,每次按下一个键,JTextArea更新总是一个关键,我想要它.
示例:我在JTextField中键入"cat",并且只有"ca"出现在JTextArea中,而不是我想要的完整字符串"cat".
任何建议表示赞赏,感谢您花时间阅读.
import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class Testing extends JFrame {
JTextField text;
JTextArea textArea;
public static void main(String[] args) {
Testing gui = new Testing();
gui.go();
}
public void go() {
this.setLayout(new BorderLayout());
text = new JTextField();
text.addKeyListener(new TestKeyListener());
textArea = new JTextArea();
this.add(text, BorderLayout.NORTH);
this.add(textArea, BorderLayout.CENTER);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.setSize(300,300);
this.setVisible(true);
}
private class TestKeyListener extends KeyAdapter {
@Override
public void keyPressed(KeyEvent evt) {
textArea.append(text.getText() + "\n");
}
}
}
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为keyPressed甚至在将键入的字符保存到JTextField文档之前发生.因此,当您尝试检索文本时,您"似乎"比实际值落后一步,但事实并非如此 - JTextField目前根本没有新值.
我知道两种可能的方法来监听JTextField文档更改以执行您尝试实现的内容,每种方法都适用于此特定情况:
public class TestingTextArea extends JFrame
{
JTextField text;
JTextArea textArea;
public static void main ( final String[] args )
{
final TestingTextArea gui = new TestingTextArea ();
gui.go ();
}
public void go ()
{
this.setLayout ( new BorderLayout () );
text = new JTextField ();
// Add DocumentListener
text.getDocument ().addDocumentListener ( new DocumentChangeListener () );
// Or add UndoableEditListener
text.getDocument ().addUndoableEditListener ( new UndoableEditAdapter () );
textArea = new JTextArea ();
this.add ( text, BorderLayout.NORTH );
this.add ( textArea, BorderLayout.CENTER );
this.setDefaultCloseOperation ( WindowConstants.EXIT_ON_CLOSE );
this.setSize ( 300, 300 );
this.setVisible ( true );
}
public class DocumentChangeAdapter implements DocumentListener
{
@Override
public void insertUpdate ( final DocumentEvent e )
{
documentChanged ( e );
}
@Override
public void removeUpdate ( final DocumentEvent e )
{
documentChanged ( e );
}
@Override
public void changedUpdate ( final DocumentEvent e )
{
documentChanged ( e );
}
public void documentChanged ( final DocumentEvent e )
{
textArea.append ( text.getText () + "\n" );
}
}
public class UndoableEditAdapter implements UndoableEditListener
{
@Override
public void undoableEditHappened ( final UndoableEditEvent e )
{
textArea.append ( text.getText () + "\n" );
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |