ホームページ >Java >&#&チュートリアル >javax.swing タイマーは繰り返すのに、ActionListener がテキスト フィールドの色を更新しないのはなぜですか?

javax.swing タイマーは繰り返すのに、ActionListener がテキスト フィールドの色を更新しないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-29 11:21:29900ブラウズ

Why Does My javax.swing Timer Repeat but My ActionListener Doesn't Update the Color of My Text Field?

javax.swing タイマーは正常に繰り返しますが、ActionListener は応答に失敗します

このコード スニペットでは、作成者は点滅を使用してテキスト フィールドの背景色を交互に変えることを目的としています。効果。タイマー設定は正しく機能しているようで、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 サイトの他の関連記事を参照してください。

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