首頁 >Java >java教程 >為什麼我的文字欄位只閃爍一次? (Swing 計時器和 ActionListener 問題)

為什麼我的文字欄位只閃爍一次? (Swing 計時器和 ActionListener 問題)

DDD
DDD原創
2024-10-29 08:43:30227瀏覽

 Why Is My TextField Flashing Only Once? (Swing Timer and ActionListener Issue)

問題處理:Swing 計時器中的Flash 行為

在提供的Java 程式碼中,使用ActionListener 設定計時器來更新後台交替序列中文字欄位的顏色。雖然計時器適當地觸發了 ActionListener,但僅在初始迭代中觀察到顏色變化。

根本原因

您的主要錯誤在於 ActionListener 的自訂實作。具體來說,以下兩個問題會妨礙正常功能:

  1. 「flasher」變數的賦值:程式碼不會初始化「flasher」變量,因此它使用未初始化的變數進行操作value.
  2. 缺乏GUI 更新: Swing 元件必須在事件調度執行緒(EDT) 內更新。否則,螢幕元素可能無法反映所需的變更。

解析度

實作以下修改:

  1. 'flasher'的初始化:包含私有布林flasher = false;在Flash 類別的頂部初始化flasher 變數。
  2. 在 EDT 中更新 GUI:在 actionPerformed 方法中,呼叫 SwingUtilities.invokeLater() 將顏色變更放置在 EDT 中。更新代碼如下:
<code class="java">@Override
public void actionPerformed(ActionEvent evt)
{
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            if (flasher)
            {
                SpreademPanel.historyPnl.NameTxt.setBackground(Color.white);
            }
            else
            {
                SpreademPanel.historyPnl.NameTxt.setBackground(Color.pink);
            }
            flasher = !flasher;
        }
    });
} //actionPerformed</code>

透過套用這些更改,計時器現在將有效地連續更新文字欄位的背景顏色。

以上是為什麼我的文字欄位只閃爍一次? (Swing 計時器和 ActionListener 問題)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn