Javax.swing 타이머는 잘 반복되지만 ActionListener는 아무 작업도 수행하지 않습니다.
제공된 코드 스니펫에서 타이머는 다음과 같이 성공적으로 구성되었습니다. 일정한 간격으로 반복하십시오. 그러나 타이머와 연결된 ActionListener는 타이머가 만료될 때 어떤 작업도 트리거하지 않습니다.
ActionListener의 actionPerformed 메서드는 타이머가 트리거될 때 작업을 수행합니다. 이 경우 메서드는 텍스트 필드의 배경색을 흰색과 분홍색 사이에서 전환하려고 시도합니다. 그러나 타이머의 연속 실행에도 불구하고 텍스트 필드의 배경색은 변경되지 않습니다.
문제의 근본 원인은 정적 내부 클래스를 ActionListener로 사용하는 데 있습니다. 정적 내부 클래스는 자신을 둘러싸는 클래스의 정적 멤버에만 액세스할 수 있다는 독특한 특성을 가지고 있습니다. 이 경우 SpreademPanel 및 HistoryPnl 변수는 정적이 아니므로 Flash 클래스 내에서 액세스할 수 없습니다.
이 문제를 해결하려면 SpreademPanel 및 HistoryPnl을 정적으로 만들거나 Flash 클래스의 인스턴스를 생성하고 전달하면 됩니다. ActionListener입니다.
다음은 인스턴스 기반 접근 방식의 예입니다.
<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>
위 내용은 타이머가 올바르게 반복됨에도 불구하고 Java Swing Timer의 ActionListener가 작업을 트리거하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!