Rumah >Java >javaTutorial >Mengapa Medan Teks Saya Berkelip Sekali sahaja? (Isu Pemasa Ayunan dan ActionListener)

Mengapa Medan Teks Saya Berkelip Sekali sahaja? (Isu Pemasa Ayunan dan ActionListener)

DDD
DDDasal
2024-10-29 08:43:30272semak imbas

 Why Is My TextField Flashing Only Once? (Swing Timer and ActionListener Issue)

Pengendalian Masalah: Gelagat Denyar dalam Pemasa Ayunan

Dalam kod Java yang disediakan, pemasa dikonfigurasikan dengan ActionListener untuk mengemas kini latar belakang warna medan teks dalam urutan berselang-seli. Semasa pemasa mencetuskan ActionListener dengan sewajarnya, perubahan warna hanya diperhatikan dalam lelaran awal.

Punca Punca

Ralat utama anda terletak pada pelaksanaan tersuai ActionListener anda . Khususnya, dua isu berikut menghalang kefungsian yang betul:

  1. Penugasan pembolehubah 'flasher': Kod tidak memulakan pembolehubah 'flasher', jadi ia beroperasi dengan yang tidak dimulakan nilai.
  2. Kekurangan Kemas Kini GUI: Komponen ayunan mesti dikemas kini dalam Benang Penghantaran Acara (EDT). Tanpa ini, elemen skrin mungkin tidak menggambarkan perubahan yang diingini.

Resolusi

Laksanakan pengubahsuaian berikut:

  1. Permulaan 'flasher': Sertakan penyiar boolean peribadi = palsu; di bahagian atas kelas Flash untuk memulakan pembolehubah flasher.
  2. Mengemas kini GUI dalam EDT: Dalam kaedah actionPerformed, gunakan SwingUtilities.invokeLater() untuk meletakkan perubahan warna dalam EDT. Kemas kini kod seperti berikut:
<code class="java">@Override
public void actionPerformed(ActionEvent evt)
{
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            if (flasher)
            {
                SpreademPanel.historyPnl.NameTxt.setBackground(Color.white);
            }
            else
            {
                SpreademPanel.historyPnl.NameTxt.setBackground(Color.pink);
            }
            flasher = !flasher;
        }
    });
} //actionPerformed</code>

Dengan menggunakan perubahan ini, pemasa kini akan mengemas kini warna latar belakang medan teks secara berkesan secara berterusan.

Atas ialah kandungan terperinci Mengapa Medan Teks Saya Berkelip Sekali sahaja? (Isu Pemasa Ayunan dan ActionListener). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn