2009-04-15 2 views
2

몇 가지 Java 응용 프로그램에서 몇 년 동안 Java Swing + My Wacom Graphire 태블릿에 대한 문제가 발생하여 혼자서 발생했습니다.java Wacom 펜 태블릿으로 디버깅 문제 해결

필자는 마우스를 클릭하는 동안 손목 문제를 해결하기 위해 펜 태블릿을 사용하며 Java 응용 프로그램을 사용하는 경우를 제외하고는 Windows에서 잘 작동합니다. Java 응용 프로그램에서 펜을 한 번 클릭하면 올바르게 작동하지 않습니다. (일반적으로 파일 선택 대화 상자 나 트리 컨트롤에서만 문제가 발생합니다.) 펜 태블릿에는 동일한 태블릿에서 작동하는 무선 마우스가 함께 제공되며 한 번의 클릭으로 올바르게 작동합니다.

문제가 WACOM 드라이버 또는 Windows 용 Java Swing 런타임 또는 둘 다에 있는지 여부를 알 수 없습니다. 전에 만난 사람이 있습니까? WACOM으로 버그 리포트를 보내고 싶지만 무엇을 말해야할지 모르겠습니다.

나는 이것을 HyperlinkListener를 추가 한 HTML 문서가있는 JEditorPane이있는 내 응용 프로그램에서 재현 할 수있었습니다. 마우스로 클릭 할 때마다 HyperlinkEvent.ACTIVATED 이벤트가 발생하지만 펜으로 클릭 할 때마다 HyperlinkEvent.ACTIVATED 이벤트가 발생하지 않습니다.

펜과 마우스의 큰 차이점 중 하나는 마우스에서 버튼을 클릭하면 마우스를 움직이지 않고 버튼 클릭이 발생하기 쉽습니다. 펜 태블릿에서는이 작업을 수행하기가 매우 어려우며 HyperlinkEvent.ACTIVATED 이벤트의 부족과 관련이있는 것으로 보입니다. 태블릿을 탭할 때 펜 위치를 이동하지 않도록 매우 조심하면 ACTIVATED 이벤트.

WACOM에이 버그에 대한 유용한 정보를 줄 수있는 방법에 대한 제안 사항이 있습니까? 특히 펜이 "일반"Windows (비 Java) 응용 프로그램에서 제대로 작동하므로 Java 응용 프로그램에서 내 펜을 사용할 수 없게되는 것은 정말 실망 스럽습니다.

일반적으로 나는이 질문을 여기서는하지 않지만 프로그래머의 관점에서 무엇을하고 있는지 알기를 원합니다. 그러면 좋은 버그 보고서를 제출할 수 있습니다.

답변

4

mouseListener을 추가하고 mouseClicked(), mousePressed(), mouseReleased() 이벤트가 등록 된시기를 확인하십시오. 그 스윙이 태블릿 펜을 마우스로 읽는 지 확실하지 않습니다. 그러나 실제로 진행되는 작업에 대한 통찰력을 제공해야합니다.

+0

대단원!전에 mouseListener를 사용하지 않았지만 매력처럼 작동했습니다. –

1

나는 당신 자신이 이미 답을 가지고 있다고 생각한다 : 펜을 움직이면 간단한 클릭이 아닌 다른 이벤트가 생기고 아마도 드래그 앤 드롭 이벤트처럼된다. Java/Swing 또는 Wacom 문제인지 여부는 확실하지 않습니다. 태블릿이 클릭을 드래그 이벤트로 등록하지 않았거나 해당 스윙이 이벤트를 잘못 해석 할 수 있습니다.

2

나는 dr.manhattan의 제안을 시도했고 그것은 매력처럼 작동합니다. mousePressed/mouseReleased 이벤트를 올바르게 가져옵니다. mouseClicked 이벤트는 항상 펜 태블릿 마우스에서 발생하지만 펜을 아주 가만있게 두지 않으면 mouseClicked 이벤트가 발생하지 않습니다. 1 픽셀의 움직임조차도 실패 할 정도로 충분합니다. 자바를 비난해야한다고 생각합니다. 수용 가능한 이동을위한 "클릭 반경"을 지정할 방법이 없습니다.

package com.example.bugs; 

import java.awt.Dimension; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 

import javax.swing.JFrame; 

public class WacomMouseClickBug { 
    public static void main(String[] args) { 
     JFrame jframe = new JFrame(); 

     jframe.addMouseListener(new MouseListener(){ 
      @Override public void mouseClicked(MouseEvent event) { 
       System.out.println("mouseClicked: "+event); 
      } 
      @Override public void mouseEntered(MouseEvent event) {} 
      @Override public void mouseExited(MouseEvent event) {} 
      @Override public void mousePressed(MouseEvent event) { 
       System.out.println("mousePressed: "+event); 
      } 
      @Override public void mouseReleased(MouseEvent event) { 
       System.out.println("mouseReleased: "+event);     
      }   
     }); 

     jframe.setPreferredSize(new Dimension(400,400));   
     jframe.pack(); 
     jframe.setLocationRelativeTo(null); 
     jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jframe.setVisible(true); 
    } 
} 
1

나는이 버그를 수천 년 전에 썬에보고했습니다. 여전히 수정되지 않았습니다. 괜찮은 UI 프레임 워크는 클릭 이벤트를 생성하기 위해 언론과 출시 사이의 움직임을 허용합니다. 높은 dpi 디스플레이에서 최대 1 픽셀의 움직임은 어리석은 행동입니다. 와콤 타블렛의 문제 일뿐만 아니라, 노인도 마우스를 계속 움직이지 못하게하는 등의 어려움을 겪습니다.