Как я могу активно (мгновенно) проверить значение текстового поля в форме JFrame БЕЗ кнопок? - PullRequest
3 голосов
/ 22 декабря 2019

Я хочу, чтобы можно было вводить текстовое поле, и когда пользователь вводит текстовое поле, я хочу, чтобы программа автоматически считывала текстовое поле без необходимости нажимать кнопку.

Пример: ПользовательТипы:"abcd" и, как пользователь набрал его, программа отображала соответствующий номер для каждой буквы.

Вывод программы:"1234"

Asв: а -> 1;б -> 2;и т.д.

Я использую " private void mycode () ", чтобы написать свой код. Я видел, что если бы я сделал его статическим, я мог бы использовать java.util.concurrent.TimeUnit (https://stackoverflow.com/a/24104427/12577450), но тогда mycode () не будет работать правильно с моими переменными.

Может кто-нибудь помочь мне?

1 Ответ

1 голос
/ 22 декабря 2019

Вы можете использовать DocumentListener класс.

Взгляните на https://docs.oracle.com/javase/7/docs/api/javax/swing/event/DocumentListener.html

import javax.swing.*;
import javax.swing.event.*;
import java.io.Serializable;

public class MyFrame extends JFrame implements Serializable {
    private static final long serialVersionUID = 123;
    private JTextField field1, field2;

    public MyFrame() {
        super.setSize(600, 400);
        super.setPreferredSize(new java.awt.Dimension(600, 400));
        super.setResizable(false);
        field1 = new JTextField();
        field2 = new JTextField();
        super.add(field1);
        super.add(field2);
        field1.setLocation(0, 0);
        field1.setSize(600, 200);
        field2.setLocation(0, 200);
        field2.setSize(600, 200);
        field2.setEditable(false);
        super.setLocationRelativeTo(null);
        field1.getDocument().addDocumentListener(new DocumentListener() {
            public void changedUpdate(DocumentEvent e) {
              f();
            }
            public void removeUpdate(DocumentEvent e) {
              f();
            }
            public void insertUpdate(DocumentEvent e) {
              f();
            }
            public void f(){
                String new_str = "";
                for (char c : field1.getText().toCharArray()) {
                    if (c >= 'a' && c <= 'z')
                        new_str += (int) (c - 'a' + 1); // is this what you want?
                    else
                        new_str += c;
                }
                field2.setText(new_str);
                field2.setBounds(0, 200, 600, 200);
            }
        });
        super.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        super.setVisible(true);
    }

    public static void main(String[] args) {
        new MyFrame();
    }
}
...