이 코드 조각에서 작성자는 깜박이는 문자를 사용하여 텍스트 필드의 배경색을 바꾸는 것을 목표로 합니다. 효과. 타이머 설정은 Flash 클래스에 설명된 작업을 반복하면서 올바르게 작동하는 것으로 보입니다. 그러나 원하는 색상 변경은 초기 교체 중에만 관찰됩니다.
추가 조사 결과 문제는 타이머의 반복 실행에 있는 것이 아니라 의도한 색상 변경에도 불구하고 시각적 업데이트가 부족하다는 것이 분명해졌습니다. 이 문제를 해결하려면 텍스트 필드의 배경색에 대한 변경 사항이 디스플레이에 반영되는지 확인하는 것이 중요합니다.
효과적인 접근 방식 중 하나는 텍스트를 캡슐화하는 사용자 정의 패널 클래스에서 PaintComponent 메서드를 재정의하는 것입니다. 필드. 이 메서드 내에서 텍스트는 업데이트된 배경색으로 렌더링되어야 합니다. 이 메커니즘을 사용하면 타이머가 색상 변경을 트리거할 때 지속적인 업데이트가 가능합니다.
다음은 이 접근 방식을 통합하는 수정된 예입니다.
<code class="java">public class FlashingPanel extends JPanel { private javax.swing.Timer timer; private JTextField textField; private boolean flashing = false; public FlashingPanel() { textField = new JTextField(10); add(textField); timer = new javax.swing.Timer(1000, this); timer.start(); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (flashing) { textField.setBackground(Color.white); } else { textField.setBackground(Color.pink); } flashing = !flashing; } @Override public void actionPerformed(ActionEvent e) { repaint(); } }</code>
이 향상된 코드에서는 페인트 구성 요소 메서드를 재정의하여 직접 적용합니다. 배경색이 텍스트 필드로 변경되어 매 간격마다 시각적 업데이트가 보장됩니다. 결과적으로 텍스트 필드의 배경색이 의도한 대로 계속해서 반복적으로 깜박입니다.
위 내용은 내 javax.swing 타이머는 반복되지만 내 ActionListener는 내 텍스트 필드의 색상을 업데이트하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!