Java TextField getText () возвращает предыдущее строковое значение - PullRequest
4 голосов
/ 06 июля 2011

У меня проблема с текстовым полем Java, когда я закрываю весь текст в JTextField и сразу же вводю новый текст (не пропускаю пробел) в JTextField, затем я использую функцию getText (), получая предыдущую строку, а не текущую строку,Пожалуйста, помогите для некоторых решений.Заранее спасибо.

Ответы [ 3 ]

12 голосов
/ 06 июля 2011

Я только что проверил проблему, которую вы описали, добавив keyListener в JTextField и напечатав возвращаемое значение метода getText () на консоль.

Что я обнаружил, так это то, что он всегда на один символ позади, если вы хотите использовать метод getText () прямо в событии keyTyped или keyPressed (я этого не знал, потому что я обычно просто использую кнопку, чтобы подтвердить, что я '' м закончил ввод текста и привязал KeyEvent к клавише Return, чтобы вызвать кнопку, если пользователь хочет подтвердить, нажав ввод)

Я думаю, это связано с тем, что textField обновляет свое текстовое значение ПОСЛЕ события снимается.

Полагаю, это то, что вы сделали, поскольку вы не предоставили пример кода, поэтому я удалю этот ответ, если это не так.

Чтобы обойти это, нужно реализовать то, что вы хотите сделать в методе keyReleased.

public void keyReleased(Event e)
{
  System.out.println(myTextField.getText());
}
7 голосов
/ 06 июля 2011

Не используйте KeyListener.Символ НЕ был добавлен в документ при возникновении события keyPressed ().

Добавить ActionListener к JButton.Таким образом, пользователь нажимает кнопку, когда ввод текста заканчивается.

Кроме того, в будущем мы отправим вам SSCCE вопрос, чтобы мы могли лучше понять, что вы пытаетесь сделать.

1 голос
/ 06 июля 2011

например:

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();
            }
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...