Rumah > Java > javaTutorial > teks badan

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

Mary-Kate Olsen
Lepaskan: 2024-11-01 03:50:28
asal
953 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan