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!