Java TextField getText()返回上一个字符串值

时间:2011-07-06 03:06:23

标签: java swing textfield

我有一个Java Textfield的问题,当我覆盖JTextField中的所有文本并立即输入新文本(不传递退格)到JTextField中,然后我使用函数getText()我得到前一个字符串而不是当前字符串。请帮忙解决一些问题。提前谢谢。

3 个答案:

答案 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();
            }
        });
    }
}