2014-09-08 2 views
11

터치 스크린이있는 Surface 타블렛에서 JButton이 실행되는 간단한 Swing GUI가 있습니다. 단추는 ActionListeners입니다. 이 버튼을 마우스로 클릭하면 시각적으로 올바르게 눌러집니다. 그러나 터치 스크린에서 도청 당하면 시각적으로 동일하게 유지되지만 여전히 actionPerformed()을 발사합니다. 두 번 두드리면 시각적으로 올바르게 눌 리지 만 2 actionPerformed()을 발사합니다.터치 스크린으로 자바 JButton을 시각적으로 우울하게 만드는 방법은 무엇입니까?

버튼을 누르기보다는 버튼을 누르면이 버튼 애니메이션이 변경되도록하는 방법이 있습니까? 나는 그것을 테스트했고 MouseListener을 사용하고 모든 논리를 mouseClicked()에 넣을 수는 있지만 터치 스크린 사용자에게 버튼을 두 번 누르라고 요청하는 것은 그리 우아하지 않습니다.

+0

1. 테스트 목적으로 [ButtonModel의 이벤트 무시] (http://stackoverflow.com/a/5755124/714968) 2. 중요한 세부 정보가 누락 된 아이디어는 없습니다. touch_screens를 사용하는 몇 명의 사용자가 있습니다. 중요한 것은 L & F, 4. 너무 광범위하게 닫는 것으로 투표 함 – mKorbel

+3

이것은 매우 명확하고 구체적이며 잘 쓰여진 질문입니다. 그것은 게시 후 처음 30 분에 10 개의 upvotes가 있습니다. 여기에 좋은 질문을 많이 던지기가 너무 많습니다. –

답변

5

문제는 마우스 클릭이 복합 이벤트 인 반면 화면의 터치가 아니라는 것입니다. 따라서 첫 번째 이벤트에서는 다시 내려갈 수없고 두 번째 이벤트에서는 다시 올라갈 수있는 방법이 없습니다.

터치 이벤트가 발생하면 버튼의 시각적 상태를 변경하여 (setPressed(true)을 사용하여) 우울하게 보이게 한 다음 100ms 정도의 타이머를 설정하고 상태를 다시 정상으로 설정하십시오 타이머가 만료 될 때 (setPressed(false) 사용).

주의 타이머 만료시주의해야합니다. setPressed(false)이 UI 스레드에서 발생해야합니다. 따라서 setPressed에 대한 두 번째 호출의 래퍼로 SwingUtilities.invokeLater()을 사용해야합니다. 또는 두 번째 호출을 대기열에 두는 수단으로 javax.swing.Timer을 사용하십시오. 지연 시간은 Action이고 Action은 UI 스레드에서 수행됩니다.

+0

아니, 난 아무 문제도없고 JButtons 그림과 함께 – mKorbel

+0

고마워, 내가 가야하고 내가 어떻게이 접근 방식에 타는지 알아 볼게. –

+0

완벽하게 작동합니다. –

관련 문제