タイマーが正しく繰り返しているにもかかわらず、Java Swing タイマーの ActionListener がアクションをトリガーしないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-01 03:50:28
オリジナル
884 人が閲覧しました

Why is my Java Swing Timer's ActionListener not triggering actions despite the timer repeating correctly?

Javax.swing タイマーは正常に繰り返しますが、ActionListener は何もしません

提供されたコード スニペットでは、タイマーは次のように正常に構成されています。一定の間隔で繰り返します。ただし、タイマーに関連付けられた ActionListener は、タイマーの期限が切れてもアクションをトリガーしません。

ActionListener の actionPerformed メソッドは、タイマーがトリガーされたときにアクションを実行します。この場合、メソッドはテキスト フィールドの背景色を白とピンクの間で切り替えようとします。ただし、タイマーが継続的に実行されているにもかかわらず、テキスト フィールドの背景色は変化しません。

問題の根本は、静的内部クラスを ActionListener として使用していることにあります。静的内部クラスには、それを囲んでいるクラスの静的メンバーのみにアクセスできるという独特の特性があります。この場合、spreademPanel 変数とhistoryPnl 変数は静的ではないため、Flash クラス内ではアクセスできません。

これを解決するには、spreademPanel とhistoryPnl を静的にするか、Flash クラスのインスタンスを作成して渡すことができます。これを ActionListener として使用します。

インスタンスベースのアプローチの例を次に示します:

<code class="java">// Instance-based ActionListener
class Flash implements ActionListener
{
    private JComponent textfield;

    public Flash(JComponent textfield) {
        this.textfield = textfield;
    }

    @Override
    public void actionPerformed(ActionEvent evt)
    {
        if (this.flasher)
        {
            textfield.setBackground(Color.white);
        }
        else
        {
            textfield.setBackground(Color.pink);
        }
        this.flasher = !this.flasher;
    } //actionPerformed
} 

// Main class
...
// Setup timer
Flash flash = new Flash(SpreademPanel.historyPnl.NameTxt); // Pass the text field to the Flash instance
tmr = new javax.swing.Timer(1000, flash);
...</code>
ログイン後にコピー

以上がタイマーが正しく繰り返しているにもかかわらず、Java Swing タイマーの ActionListener がアクションをトリガーしないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!