このコード スニペットでは、作成者は点滅を使用してテキスト フィールドの背景色を交互に変えることを目的としています。効果。タイマー設定は正しく機能しているようで、Flash クラスで説明されているアクションが繰り返されます。ただし、望ましい色の変化は最初の変更中にのみ観察されます。
さらに詳しく調べると、問題はタイマーの繰り返し実行にあるのではなく、意図した色の変化にもかかわらず視覚的な更新がないことにあることが明らかになります。この問題を解決するには、テキスト フィールドの背景色に加えた変更が表示に反映されていることを確認することが重要です。
効果的な方法の 1 つは、テキストをカプセル化するカスタム パネル クラスでPaintComponent メソッドをオーバーライドすることです。分野。このメソッド内では、テキストは更新された背景色でレンダリングされる必要があります。このメカニズムにより、タイマーによって色の変更がトリガーされるため、継続的な更新が可能になります。
このアプローチを組み込んだ変更された例を次に示します。
<code class="java">public class FlashingPanel extends JPanel { private javax.swing.Timer timer; private JTextField textField; private boolean flashing = false; public FlashingPanel() { textField = new JTextField(10); add(textField); timer = new javax.swing.Timer(1000, this); timer.start(); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (flashing) { textField.setBackground(Color.white); } else { textField.setBackground(Color.pink); } flashing = !flashing; } @Override public void actionPerformed(ActionEvent e) { repaint(); } }</code>
この拡張されたコードでは、paintComponent メソッドがオーバーライドされて直接適用されます。テキストフィールドの背景色が変化し、間隔ごとに視覚的な更新が保証されます。その結果、テキスト フィールドの背景色が意図したとおり繰り返し継続的に点滅します。
以上がjavax.swing タイマーは繰り返すのに、ActionListener がテキスト フィールドの色を更新しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。