애플리케이션 애니메이션 컨텍스트에서 포스터의 배경색을 수정하는 문제가 발생했습니다. 텍스트 필드가 타이머 메커니즘을 통해 전파되고 있었지만 예상되는 응답인 반복된 변경이 화면에 시각화되지 않았습니다. 관련 코드 조각은 다음과 같습니다.
<code class="java">Flash flash = new Flash(); tmr = new javax.swing.Timer(1000, flash); tmr.addActionListener(flash); tmr.setInitialDelay(0); tmr.setRepeats(true); tmr.start();</code>
디버깅 시 액션 리스너가 대체 항목을 반복하지만 초기 변경 사항만 표시하는 것으로 확인되었습니다.
제시된 사례의 문제는 ActionListener 구현의 내부 결함으로 인해 발생했습니다. 이를 수정하고 기본 작업을 설명하기 위해 변동하는 채도 수준을 모델링하는 대체 솔루션이 도입되었습니다.
<code class="java">public class FlashTest extends JPanel { // Building blocks Timer t = null; // Timer for the color transitions Queue<Color> clut = null; // Queue for holding a cycle of hues // Setup method FlashTest() { clut = new LinkedList<>(); // Initialize the color cycle for (int i = 0; i < N; i++) { clut.add(Color.getHSBColor(1, 1 - (i / N), 1)); } for (int i = 0; i < N; i++) { clut.add(Color.getHSBColor(1, i / N, 1)); } t = new Timer(50, new ActionListener() { // Timer for managing color transitions @Override public void actionPerformed(ActionEvent e) { setBackground(clut.peek()); clut.add(clut.remove()); // Color transition management } }); t.start(); // Commencement of color cycling } // Override necessitated by color cycling @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // Call to superclass method for component depiction g.drawString(s, getWidth() / 2 - w2, getHeight() / 2 + h2); // Draw the text } // Launcher public static void main(String[] args) { EventQueue.invokeLater(() -> { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(new FlashTest()); f.pack(); f.setVisible(true); }); } }</code>
여기서 색상 주기는 대기열에 유지되어 진행 상황을 연속적으로 묘사할 수 있습니다. 'paintComponent' 메서드는 배경에 현재 색상이 지속적으로 표시되도록 보장합니다.
이 해결 방법은 원래 문제를 해결할 뿐만 아니라 시간에 따른 색상 전환을 실제로 구현하는 방법도 보여줍니다.
위 내용은 Javax.swing 타이머는 효과적으로 반복되지만 ActionListener는 비활성 상태로 유지되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!