ワコムのペンタブレットとJavaのSwingのデバッグ頭痛
-
09-09-2019 - |
質問
私はいくつかのJavaアプリケーションでは、数年のためのJava Swingの+私のワコムGraphireタブレットでの問題に直面して実行してきたし、今、私自身でそれに遭遇した。
私は、マウスをクリックしながら、手首の問題を回避するためにペンタブレットを使用し、そしてそれは私がJavaアプリケーションを使用しているとき以外はWindowsで正常に動作します。 Javaアプリケーションでは、ペンのシングルクリックが正しく動作しません。 (通常は問題はファイル選択ダイアログボックスまたはツリーコントロールで発生します。)ペンタブレットでも同じタブレットで動作するワイヤレスマウスが付属しており、そのシングルクリックが正常に動作しています。
私はこの問題は、WACOMドライバまたはWindowsまたは両方のためのJava Swingのランタイムであるかどうかわかりません。誰もがこの前に遭遇していますか?私はWACOMのバグレポートを提出したいのですが、私はそれらを伝えるためにどのような見当がつかないます。
私はHyperlinkListenerにを追加しましたHTMLドキュメントによってJEditorPaneを持って自分のアプリケーションでこれを再現することができました。私はマウスを使って、すべてのシングルクリックでHyperlinkEvent.ACTIVATEDイベントを取得し、私はペンで、すべてのシングルクリックでHyperlinkEvent.ACTIVATEDイベントを得ることはありません。
ペンとマウスとの間の1つの大きな違いは、マウスのボタンをクリックしたとき、それはマウスの動きなしでボタンクリックを引き起こすことは本当に簡単だということです。ペンタブレット上では、これを行うことは非常に困難であり、それはHyperlinkEvent.ACTIVATEDイベントの欠如と相関しているようだ - 私は非常に慎重だ場合、私はタブレットをタップしたとき、私は私が作動し得ることができると思い、ペンの位置を移動させませんイベントます。
しようとするもののために任意の提案は、私はWACOMにこのバグに関するいくつかの良い情報を与えることができますか?これは、ペンが「通常の」Windowsの(非Java)アプリケーションで正常に動作し、特に以来、Javaアプリケーションと私のペンを使用することはできませんし、本当にイライラます。
通常、私はここにこの質問をしませんが、私はそう、私は良いバグレポートを提出することができますが起こっているかもしれないもののプログラマのの立場から知りたいと思います。
解決
あなたはどうするべきことmouseListener
を追加し、それがmouseClicked()
、mousePressed()
、mouseReleased()
イベントを登録するときに表示されます。スイングはしかし、マウスとタブレットペンを読み込む場合、私はよく分かりません。しかし、それはあなたが実際に何が起こっているいくつかの洞察を与える必要があります。
他のヒント
私はdr.manhattanの提案を試してみましたが、それは魔法のように動作します。私はのmousePressed /がイベントを正しくのmouseReleased取得します。イベントは、ペンタブレット、マウスで常に起こるが、私はまだ非常にペンを維持するために管理しない限り、イベントがペンで発生しないのmouseClickedのmouseClicked。でも、1ピクセルの動きはそれを失敗させるには十分です。私は、私はこの1つのJavaを非難する必要がありますね:acceptible運動のための「クリック半径」を指定する方法はありません。
。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);
}
}
私はあなたが既に自分で答えを得たと思います。 私はそれは、Java / Swingのか、ワコムの問題だ、それはタブレットのようなクリックを登録していないことが考えられますかどうかはわからないが、ドラッグイベントとして、またはそのスイングは間違ってイベントを解釈することができます。
私は日に何年も前にこのバグを報告しましたそれはまだ固定されていません。まともなUIフレームワークは、プレスリリースとの間にいくつかの動きがクリックイベントを生成することができます。高解像度ディスプレイの1つの画素の最大移動はちょうどばかげています。それだけでなく、ワコムタブレットに問題がある、つまり、高齢者でもクリックしたときに、まだマウスを維持する難しさを持っています。