JTextField - keyTyped не возвращает всю строку

124
12 декабря 2020, 00:30

У меня есть поле JTextField на нем висит обработчик KeyTyped и мне нужно считать текст с этого поля но у меня такая проблема, что когда вызываю getText() я получаю строку без последнего введенного символа то есть ввел первую букву getText вернул пустую строку ввел вторую букву получил строку с буквой которую ввел в первый раз и так далее почему так происходит?

Answer 1

Вариант который предполагается к использованию .getDocument().addDocumentListener()

JLabel lbl = new JLabel();
lbl.setPreferredSize(new Dimension(150, 22));
JTextField tf = new JTextField();
tf.setPreferredSize(new Dimension(150, 22));
tf.getDocument().addDocumentListener(new DocumentListener() {
    @Override
    public void changedUpdate(DocumentEvent e) {
        lbl.setText(tf.getText());
    }
    @Override
    public void insertUpdate(DocumentEvent e) {
        lbl.setText(tf.getText());
    }
    @Override
    public void removeUpdate(DocumentEvent e) {
        lbl.setText(tf.getText());
    }
});
JFrame f = new JFrame();
f.setSize(new Dimension(200,100));
f.setLayout(new FlowLayout());
f.add(lbl);
f.add(tf);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);

Так же худо-бедно сработает и Ваш подход если слушать не keyTyped а keyReleased, при этом поведение будет немного не стандартное, проверьте сами:

JLabel lbl = new JLabel();
lbl.setPreferredSize(new Dimension(150, 22));
JTextField tf = new JTextField();
tf.setPreferredSize(new Dimension(150, 22));
tf.addKeyListener(new KeyAdapter() {
    @Override
    public void keyReleased(KeyEvent e) {
        lbl.setText(tf.getText());
    }
});
JFrame f = new JFrame();
f.setSize(new Dimension(200,100));
f.setLayout(new FlowLayout());
f.add(lbl);
f.add(tf);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);
READ ALSO
Чем отличаются способы присвоить строку?

Чем отличаются способы присвоить строку?

Хотел спросить чем отличается: String name = "Mike"; от String name = new String(); или же

112
проблема с калькулятором на java [дубликат]

проблема с калькулятором на java [дубликат]

Хотел бы к вам обратиться с проблемой с моим калькулятором на java Вот сам код:

98
Как реализовать авто прокрутку в Horizontal Scroll View

Как реализовать авто прокрутку в Horizontal Scroll View

Например: У меня есть 10 ImageView которые находятся в LinearLayout который находится в Horizontal Scroll ViewЯ хочу чтобы каждые 2-3 секунды они автоматом прокручивались...

119