2013-05-20 5 views
0

전문적인 용도로 만든 Java Swing 기반 응용 프로그램에 문제가 있습니다.몇 가지 방법으로 인해 스윙 구성 요소가 흐려짐

새 클래스 PanelUserInput이 있고 IS-A ItemListener 및 ActionListener 인 PanelUserInputListener이라는이 클래스에 대한 별도의 수신기를 만들었습니다.

클래스 PanelUserInput 클래스에는 현재 더미 값이있는 레이블과 콤보 상자가 5 개 이상 있습니다. 선택한 값을 제출하는 버튼도 있습니다. GridBadLayout을 사용하여 구성 요소의 위치를 ​​지정합니다.

이제는 ComboBoxes의 항목 선택이 마우스를 통해 차단된다는 점이 문제입니다. 비록 내 키보드 화살표 키 (위아래)를 사용하여 요소에 액세스 할 수 있습니다. 또한, 나는 마우스를 사용하여 버튼을 클릭 할 수없는 모르지만, 난 단지 누군가가 자바 스윙에서 행동의이 종류를 본 사람

공간을 눌러 내 키보드를 사용하여 그렇게 할 수 있고, 최적의 솔루션은 무엇인가?

기밀로 인해 코드를 공유 할 수 없습니다.

+4

* "기밀로 인해 코드를 공유 할 수 없습니다."* 1) 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. 2) EDT (Event Dispatch Thread)를 막지 마십시오. GUI가 그럴 때 멈출 것입니다. 'Thread.sleep (n)'을 호출하는 대신에 태스크를 반복하기 위해 Swing Timer를 구현하거나 장시간 실행되는 태스크를 위해 SwingWorker를 구현하십시오. 자세한 내용은 [동시성의 동시성] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)을 참조하십시오. –

+1

유리 창을 사용하고 있습니까? 마우스 리스너를 연결했을 가능성이 있습니까? – MadProgrammer

답변

5

사용자의 액션 이벤트에 응답 할 때 당신은 항상 패턴

java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       doSomething(); 
      } 
     }); 

를 사용해야합니다. 별로 구체적이지 않고 말할 수 있습니다.

+1

* "doSomething();이'label.setText ("당신이 선택한 : Tomato! ");'와 같으면 과잉 반응을 보입니다. & 응답으로 EDT에서 이미 호출되었습니다. 액션 또는 아이템 이벤트. –

+2

누군가가 그 코드 블록에 물건을 추가하기 시작하면 제 의견으로는 그것을해야합니다. – Bathsheba

+0

흥미로운 점은 '미래에 대한 계획'을 신중히 생각한다는 것입니다. 너는 나를 그것에 돌렸다. 감사! :) –

관련 문제