【问题标题】:Java TextField getText() returns previous string valueJava TextField getText() 返回前一个字符串值
【发布时间】:2011-07-06 03:06:23
【问题描述】:

我对 Java 文本字段有一个问题,即当我覆盖 JTextField 中的所有文本并立即将新文本(不要传递退格键)输入到 JTextField 中时,然后我使用函数 getText() 我得到了前一个字符串而不是当前字符串.请帮助一些解决方案。提前致谢。

【问题讨论】:

  • 如何调用getText()方法?即:通过在键入文本后按下按钮,使用 keyEvent 侦听器等?
  • 您可以通过 evt.getKeyChar()(来自 KeyEvent)获取最后输入的字符并将其与 textField.getText() 连接以获取您需要的字符串。

标签: java swing textfield


【解决方案1】:

我刚刚通过将 keyListener 添加到 JTextField 并将 getText() 方法的返回值打印到控制台来测试您描述的问题。

我发现如果你想在 keyTyped 或 keyPressed 事件中使用 getText() 方法,它总是落后一个字符(我不知道这一点,因为我通常只使用一个按钮来确认我' m 完成输入文本并将 KeyEvent 绑定到 Return 键以触发按钮,如果用户想通过按 Enter 确认)

我认为这是由于 textField 在事件拍摄后更新其文本值。

我认为这是您所做的,因为您没有提供示例代码,所以如果不是,我将删除此答案。

解决此问题的方法是在 keyReleased 方法中实现您想要执行的操作。

public void keyReleased(Event e)
{
  System.out.println(myTextField.getText());
}

【讨论】:

  • 强调 Rob 的建议:不要使用 KeyListeners ;-)
【解决方案2】:

不要使用 KeyListener。触发 keyPressed() 事件时,该字符尚未添加到文档中。

将 ActionListener 添加到 JButton。这样,当文本输入完成时,用户点击按钮。

另外,在未来发布SSCCE 与您的问题,以便我们更好地了解您想要做什么。

【讨论】:

  • 谢谢你,先生,我会改进我的帖子。
【解决方案3】:

例如:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 2019-07-01
    • 1970-01-01
    相关资源
    最近更新 更多