2009-04-15 11 views
2

私はいくつかのJavaアプリケーションで数年前からJava Swing + Wacom Graphireタブレットの問題を克服してきました。java Wacomペンタブレットを使ったデバッグの頭痛

私はマウスをクリックしている間に手首の問題を回避するためにペンタブレットを使用し、Javaアプリケーションを使用している場合を除いてWindowsでは正常に動作します。 Javaアプリケーションでは、ペンのシングルクリックは正しく機能しません。 (通常、この問題はファイル選択ダイアログボックスやツリーコントロールでのみ発生します)。ペンタブレットには同じタブレットで動作するワイヤレスマウスが付属しており、シングルクリックが正しく機能します。

問題がWACOMドライバにあるのかWindows用Java Swingランタイムにあるのか、その両方であるのかわかりません。誰かがこれまでに遭遇したことはありますか?私はWACOMでバグレポートを提出したいですが、私はそれらに何を伝えるべきか分かりません。

私はこれを私自身のアプリケーションで再現することができました。これには、ハイパーリンクリスナーを追加した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ピクセルの動きでさえそれが失敗するのに十分です。私はこれをJavaのせいにしなければならないと思います。許容できる移動のために「クリック半径」を指定する方法はありません。

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

私はこのバグを何年も前にSunに報告しました。まだ修正されていません。まともなUIフレームワークは、プレスイベントとリリースイベントの間の動きを許し、クリックイベントを生成します。高dpiディスプレイ上の1ピクセルの最大移動はばかげている。これはワコム錠の問題だけでなく、高齢者もマウスをクリックしたままにしておくことが難しいということです。

関連する問題