Rumah  >  Artikel  >  Java  >  Mengapakah ActionListener Java Swing Timer saya tidak mencetuskan tindakan walaupun pemasa berulang dengan betul?

Mengapakah ActionListener Java Swing Timer saya tidak mencetuskan tindakan walaupun pemasa berulang dengan betul?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-01 03:50:28875semak imbas

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

Javax.swing timer berulang dengan baik, tetapi ActionListener tidak melakukan apa-apa

Dalam coretan kod yang disediakan, pemasa berjaya dikonfigurasikan untuk ulangi secara berkala. Walau bagaimanapun, ActionListener yang dikaitkan dengan pemasa tidak mencetuskan sebarang tindakan apabila pemasa tamat tempoh.

Kaedah ActionListener actionPerformed bertanggungjawab untuk mengambil tindakan apabila pemasa dicetuskan. Dalam kes ini, kaedah cuba menogol warna latar belakang medan teks antara putih dan merah jambu. Walau bagaimanapun, warna latar belakang medan teks kekal tidak berubah walaupun pemasa dilaksanakan secara berterusan.

Punca isu ini terletak pada penggunaan kelas dalaman statik sebagai ActionListener. Kelas dalaman statik mempunyai ciri khas di mana mereka hanya boleh mengakses ahli statik kelas tertutup mereka. Dalam kes ini, pembolehubah spreademPanel dan historyPnl tidak statik, dan oleh itu tidak boleh diakses dalam kelas Flash.

Untuk menyelesaikannya, seseorang boleh sama ada menjadikan spreademPanel dan historyPnl statik, atau mencipta contoh kelas dan pas Flash ia sebagai ActionListener.

Berikut ialah contoh dengan pendekatan berasaskan contoh:

<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>

Atas ialah kandungan terperinci Mengapakah ActionListener Java Swing Timer saya tidak mencetuskan tindakan walaupun pemasa berulang dengan betul?. 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