我有一个Java Textfield的问题,当我覆盖JTextField中的所有文本并立即输入新文本(不传递退格)到JTextField中,然后我使用函数getText()我得到前一个字符串而不是当前字符串。请帮忙解决一些问题。提前谢谢。
答案 0 :(得分:11)
我刚刚通过向JTextField添加keyListener并将getText()方法的返回值打印到控制台来测试您描述的问题。
我发现如果你想在keyTyped或keyPressed事件中使用getText()方法,它总是一个字符(我不知道这是因为我通常只是用一个按钮来确认我'完成输入文本并将KeyEvent绑定到Return键以触发按钮,如果用户想通过按Enter键确认)
我认为这是因为textField在事件发生后更新了其文本值。
我认为这是你所做的,因为你没有提供示例代码,所以如果不是,我会删除这个答案。
解决这个问题的方法是在keyReleased方法中实现你想要做的事情。
public void keyReleased(Event e)
{
System.out.println(myTextField.getText());
}
答案 1 :(得分:7)
不要使用KeyListener。触发keyPressed()事件时,该字符尚未添加到Document中。
将ActionListener添加到JButton。这样,当输入文本时,用户点击按钮。
此外,将来发布SSCCE并提出问题,以便我们更好地了解您的目标。
答案 2 :(得分:1)
例如:
import java.awt.GridLayout;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class TextLabelMirror {
private JPanel mainPanel = new JPanel();
private JTextField field = new JTextField(20);
private JTextField field1 = new JTextField(20);
public TextLabelMirror() {
field.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void changedUpdate(DocumentEvent e) {
updateLabel(e);
}
@Override
public void insertUpdate(DocumentEvent e) {
updateLabel(e);
}
@Override
public void removeUpdate(DocumentEvent e) {
updateLabel(e);
}
private void updateLabel(DocumentEvent e) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
field1.setText(field.getText());
}
});
}
});
mainPanel.setLayout(new GridLayout(1, 0, 10, 0));
mainPanel.add(field);
mainPanel.add(field1);
}
public JComponent getComponent() {
return mainPanel;
}
private static void createAndShowUI() {
JFrame frame = new JFrame("TextLabelMirror");
frame.getContentPane().add(new TextLabelMirror().getComponent());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowUI();
}
});
}
}