java textfield gettext()返回上一个字符串值

beq87vna  于 2021-07-05  发布在  Java
关注(0)|答案(3)|浏览(298)

java textfield有一个问题,即当我覆盖jtextfield中的所有文本并立即向jtextfield中输入新文本(不要传递backspace),然后使用函数gettext()获取前一个字符串而不是当前字符串。请帮忙找些解决办法。提前谢谢。

zu0ti5jz

zu0ti5jz1#

例如:

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

bqjvbblv2#

我刚刚测试了您描述的问题,向jtextfield添加了一个keylistener,并将gettext()方法的返回值打印到控制台。
我发现,如果您想在keytyped或keypressed事件中使用gettext()方法,那么它总是落后一个字符(我不知道这一点,因为我通常只使用一个按钮来确认输入完文本,并将一个keyevent绑定到return键,以便在用户想通过按enter来确认时触发按钮)
我认为这是由于textfield在事件被拍摄后更新了它的文本值。
我假设这就是你所做的,因为你没有提供样本代码,所以我会删除这个答案,如果它不是。
解决这个问题的方法是实现您想在keyreased方法中执行的操作。

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

yyhrrdl83#

不要使用keylister。在触发keypressed()事件时,该字符尚未添加到文档中。
向jbutton添加actionlistener。这样,用户在完成文本输入后单击按钮。
另外,在以后的帖子与你的sscce的问题,这样我们可以更好地了解你在试图做什么。

相关问题