编写一个java程序,在主线程中创建一个Frame类型窗口,在该窗口中在创建一个线程,该线程每隔两秒种给出一个字母,用户输入该字母到文本框中

编写一个java程序,在主线程中创建一个Frame类型窗口,在该窗口中在创建一个线程,该线程每隔两秒种给出一个字母,用户输入该字母到文本框中


import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MainFrame extends JFrame {
    private JTextField textField;
    public MainFrame() {
        setTitle("输入字母");
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
        textField = new JTextField();
        add(textField);
        new Thread(new LetterTask()).start();
    }
    private class LetterTask implements Runnable {
        private int letterIndex = 0;
        private String[] letters = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
        @Override
        public void run() {
            while (true) {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        if (letterIndex >= letters.length) {
                            letterIndex = 0;
                        }
                        String letter = letters[letterIndex];
                        textField.setText(letter);
                        letterIndex++;
                    }
                });
            }
        }
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                MainFrame frame = new MainFrame();
                frame.setVisible(true);
            }
        });
    }
}

该回答参考chatGPT:
在该程序中,我们创建了一个继承自JFrame的MainFrame类,在MainFrame类的构造函数中,我们创建了一个文本框并添加到窗口中,然后我们创建了一个LetterTask类实现Runnable接口,在LetterTask的run方法中,我们不断地循环并等待2秒,然后使用SwingUtilities.invokeLater方法将字母更新到文本框中。
在main函数中,我们使用SwingUtilities.invokeLater方法来创建MainFrame并显示窗口。