Swing Timer ActionListener がテキスト フィールドの背景色を更新しないのはなぜですか?

Barbara Streisand
リリース: 2024-10-28 00:21:01
オリジナル
874 人が閲覧しました

Why Doesn't My Swing Timer ActionListener Update the Text Field's Background Color?

Javax.swing タイマーは繰り返しますが、ActionListener は実行されません

はじめに

テキストフィールドに点滅する背景色を作成しようとすると、タイマー機能は期待どおりに実行されるが、ActionListener が色の変更をトリガーしないという特有の問題が発生しました。この不一致により、最初の切り替え後も背景色は変更されません。

タイマー セットアップ

このシナリオのタイマー セットアップは、Swing のセットアップに関する業界標準のガイドラインに準拠しています。適切な遅延、繰り返しの有効化、および ActionListener を備えたタイマー。タイマーは、色の変更を処理するために、ActionListener インターフェイスを実装する Flash クラスを開始します。

ActionListener の実装

ActionListener は、ネストされた静的クラス内で定義されており、次の内容を含みます。内部ブール変数フラッシャーに基づいて背景色を切り替えるロジック。デバッグでアクションが実行されていることを確認しましたが、最初の切り替え後に色の変更が画面に反映されません。

根本原因と解決策

問題の核心問題は、テキスト フィールドを含む Swing コンポーネントが外観を更新するために repaint() メソッドを明示的に呼び出す必要があるという事実にあります。この呼び出しがないと、setBackground() またはその他の外観に影響するメソッドを通じて行われた変更はユーザーには表示されません。

実装の改訂

問題を修正するには、 ActionListener には、背景色を変更した後に repaint() の呼び出しを含める必要があります。 ActionListener の改訂版は次のとおりです。

<code class="java">static class Flash implements ActionListener {
    public void actionPerformed(ActionEvent evt) {
        if (flasher) {
            SpreademPanel.historyPnl.NameTxt.setBackground(Color.white);
        } else {
            SpreademPanel.historyPnl.NameTxt.setBackground(Color.pink);
        }
        **SpreademPanel.historyPnl.NameTxt.repaint();** // Trigger repaint
        flasher = !flasher;
    } //actionPerformed
} //Flash</code>
ログイン後にコピー

repaint() 呼び出しを追加することで、テキスト フィールドの外観が ActionListener のロジックに基づいて正しく更新されるようになりました。

以上がSwing Timer ActionListener がテキスト フィールドの背景色を更新しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート