>Java >java지도 시간 >내 TextField가 한 번만 깜박이는 이유는 무엇입니까? (스윙 타이머 및 ActionListener 문제)

내 TextField가 한 번만 깜박이는 이유는 무엇입니까? (스윙 타이머 및 ActionListener 문제)

DDD
DDD원래의
2024-10-29 08:43:30221검색

 Why Is My TextField Flashing Only Once? (Swing Timer and ActionListener Issue)

문제 처리: 스윙 타이머의 플래시 동작

제공된 Java 코드에서 타이머는 ActionListener로 구성되어 배경을 업데이트합니다. 교대로 나타나는 텍스트 필드의 색상입니다. 타이머가 ActionListener를 적절하게 트리거하는 동안 색상 변경은 초기 반복에서만 관찰됩니다.

근본 원인

주요 오류는 ActionListener의 사용자 정의 구현에 있습니다. . 특히 다음 두 가지 문제는 올바른 기능을 방해합니다.

  1. 'flasher' 변수 할당: 코드가 'flasher' 변수를 초기화하지 않으므로 초기화되지 않은 변수로 작동합니다. value.
  2. GUI 업데이트 부족: Swing 구성요소는 EDT(Event Dispatch Thread) 내에서 업데이트되어야 합니다. 이것이 없으면 화면 요소에 원하는 변경 사항이 반영되지 않을 수 있습니다.

해상도

다음 수정 사항을 구현하세요.

  1. 'flasher' 초기화: 개인 부울 플래셔 포함 = false; Flash 클래스 상단에서 flasher 변수를 초기화합니다.
  2. EDT에서 GUI 업데이트: actionPerformed 메서드 내에서 SwingUtilities.invokeLater()를 호출하여 EDT 내에 색상 변경을 배치합니다. 다음과 같이 코드를 업데이트하세요.
<code class="java">@Override
public void actionPerformed(ActionEvent evt)
{
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            if (flasher)
            {
                SpreademPanel.historyPnl.NameTxt.setBackground(Color.white);
            }
            else
            {
                SpreademPanel.historyPnl.NameTxt.setBackground(Color.pink);
            }
            flasher = !flasher;
        }
    });
} //actionPerformed</code>

이러한 변경 사항을 적용하면 이제 타이머가 텍스트 필드의 배경색을 지속적으로 효과적으로 업데이트합니다.

위 내용은 내 TextField가 한 번만 깜박이는 이유는 무엇입니까? (스윙 타이머 및 ActionListener 문제)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.