J文本区域在运行时单击 JButton 时在一段时间内未清晰显示

J文本区域在特定时期内没有清晰显示。

我创建了一个JFrame,里面添加了一个J按钮,同时单击JButton,JFrame将被展开,它将显示一个JTextArea,它将添加2行文本,间隔2秒。问题是在单击 JButton 时,JFrame 已展开,但 J 文本区域未清晰显示(J文本区域以黑色显示),如下所示:

http://img3.mukewang.com/6333fd01000142e203870393.jpg

2秒后,它将以2行文本显示,如下所示:

http://img2.mukewang.com/6333fd0c00015cb103860395.jpg

import java.awt.Color;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.BorderFactory;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JTextArea;


public class ExpandJFrame {

    public static JFrame frame;

    public static JButton btn;

    public static JTextArea textArea;


    public static void main(String[] args) {

        frame = new JFrame("JFrame Expand");

        frame.setSize(400, 200);


        btn = new JButton("Expand");

        btn.setBounds(10, 10, 80, 25);


        btn.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent ae) {

                try {

                    frame.setSize(400, 400);

                    textArea = new JTextArea();

                    textArea.setBounds(5, 210, 370, 150);

                    textArea.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK));

                    frame.add(textArea);

                    Thread.sleep(1000);

                    textArea.append("FirstLine\n");

                    Thread.sleep(1000);

                    textArea.append("SecondLine\n");

                } catch (Exception e) {


                }

            }

        });

        frame.add(btn);

        frame.setLayout(null);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setVisible(true);

    }

}

预期场景:在单击 JButton 时,应将 JTextArea 清晰显示为空,然后用户应该能够逐个查看输入的 2 行。


任何人都可以帮上忙吗?


一只斗牛犬
浏览 87回答 1
1回答

潇湘沐

2秒后,它将以2行文本显示不要使用线程睡眠(...)。这可以防止框架自行重新绘制。相反,您需要:将操作侦听器中的代码移动到单独的线程。这可以通过使用 Swing Worker 来完成,如上面链接的 Swing 教程 o 中所示。Concurrency使用 Swing 计时器计划对文本区域的更新。对于这种方法,您可以将文本添加到数组列表中。然后启动计时器。当计时器触发时,您可以删除位置 0 处的文本,并将其显示在文本区域中。当数组列表为空时,停止计时器。这将允许您在文本区域中轻松显示多行文本。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java