J文本区域在特定时期内没有清晰显示。我创建了一个JFrame,里面添加了一个J按钮,同时单击JButton,JFrame将被展开,它将显示一个JTextArea,它将添加2行文本,间隔2秒。问题是在单击 JButton 时,JFrame 已展开,但 J 文本区域未清晰显示(J文本区域以黑色显示),如下所示:2秒后,它将以2行文本显示,如下所示: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 行。任何人都可以帮上忙吗?
1 回答

潇湘沐
TA贡献1816条经验 获得超6个赞
2秒后,它将以2行文本显示
不要使用线程睡眠(...)。这可以防止框架自行重新绘制。
相反,您需要:
将操作侦听器中的代码移动到单独的线程。这可以通过使用 Swing Worker 来完成,如上面链接的 Swing 教程 o 中所示。
Concurrency
使用 Swing 计时器计划对文本区域的更新。对于这种方法,您可以将文本添加到数组列表中。然后启动计时器。当计时器触发时,您可以删除位置 0 处的文本,并将其显示在文本区域中。当数组列表为空时,停止计时器。这将允许您在文本区域中轻松显示多行文本。
添加回答
举报
0/150
提交
取消