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 サイトの他の関連記事を参照してください。