亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

J文本區域在運行時單擊 JButton 時在一段時間內未清晰顯示

J文本區域在運行時單擊 JButton 時在一段時間內未清晰顯示

一只斗牛犬 2022-09-28 15:51:03
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行文本顯示

不要使用線程睡眠(...)。這可以防止框架自行重新繪制。

相反,您需要:

  1. 將操作偵聽器中的代碼移動到單獨的線程。這可以通過使用 Swing Worker 來完成,如上面鏈接的 Swing 教程 o 中所示。Concurrency

  2. 使用 Swing 計時器計劃對文本區域的更新。對于這種方法,您可以將文本添加到數組列表中。然后啟動計時器。當計時器觸發時,您可以刪除位置 0 處的文本,并將其顯示在文本區域中。當數組列表為空時,停止計時器。這將允許您在文本區域中輕松顯示多行文本。


查看完整回答
反對 回復 2022-09-28
  • 1 回答
  • 0 關注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號