ホームページ >Java >&#&チュートリアル >TextField が 1 回だけ点滅するのはなぜですか? (Swing Timer と ActionListener の問題)

TextField が 1 回だけ点滅するのはなぜですか? (Swing Timer と 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 のカスタム実装にあります。 。具体的には、次の 2 つの問題が適切な機能を妨げています:

  1. 'flasher' 変数の割り当て: コードは 'flasher' 変数を初期化していないため、初期化されていない状態で動作します。 value.
  2. GUI 更新の欠如: Swing コンポーネントはイベント ディスパッチ スレッド (EDT) 内で更新する必要があります。これがないと、画面要素に必要な変更が反映されない可能性があります。

解像度

次の変更を実装します:

  1. 「フラッシャー」の初期化: プライベート ブール値フラッシャー = false を含めます。
  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>

これらの変更を適用すると、タイマーはテキスト フィールドの背景色を継続的に効果的に更新します。

以上がTextField が 1 回だけ点滅するのはなぜですか? (Swing Timer と ActionListener の問題)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。