使用Wacom数位板,用Swing调试头痛

时间:2009-04-15 15:01:50

标签: java swing wacom pen-tablet

我已经在几个Java应用程序中遇到Java Swing +我的Wacom Graphire平板电脑的问题已经运行了几年,现在我已经遇到了它。

我使用数位板来解决手腕问题,同时点击鼠标,它在Windows下工作正常,除非我使用的是Java应用程序。在Java应用程序中,单击笔无法正常工作。 (通常只有文件选择对话框或树形控件才会出现问题。)数位板还附带一个可与同一平板电脑配合使用的无线鼠标,只需单击即可正常工作。

我不知道问题是在WACOM驱动程序中还是在Windows的Java Swing运行时中或两者中。有没有人遇到过这个?我想向WACOM提交一份错误报告,但我不知道该告诉他们什么。

我已经能够在我自己的应用程序中重现这一点,该应用程序具有带有HTML文档的JEditorPane,我已经添加了HyperlinkListener。我用鼠标每次点击都会得到HyperlinkEvent.ACTIVATED事件,但是每次点击笔都没有得到HyperlinkEvent.ACTIVATED事件。

笔和鼠标之间的一个很大区别是,当您单击鼠标上的按钮时,很容易在没有鼠标移动的情况下导致按钮单击。在数位板上很难做到这一点,这似乎与缺少HyperlinkEvent.ACTIVATED事件有关 - 如果我非常小心在我点击平板电脑时不移动笔位置,我想我可以得到激活事件

任何有关尝试的建议我可以向WACOM提供有关此错误的一些好消息吗?无法将我的笔用于Java应用程序是非常令人沮丧的,特别是因为笔可以正常使用“常规”Windows(非Java)应用程序。

通常情况下,我不会在这里提出这个问题,但我想从程序员的角度找出可能发生的事情,这样我就可以提交一份好的错误报告。

4 个答案:

答案 0 :(得分:4)

您应该做的是添加mouseListener并查看它何时注册mouseClicked()mousePressed()mouseReleased()事件。我不确定摇摆是否可以将平板电脑笔作为鼠标读取。但是,它应该让您对实际发生的事情有所了解。

答案 1 :(得分:2)

我试过了曼哈顿博士的建议,它就像一个魅力。我正确地得到了mousePressed / mouseReleased事件; 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);
    }
}

答案 2 :(得分:1)

我认为你已经自己得到了答案:移动笔会产生一些其他事件,而不是简单的点击,也许是拖放式事件。 我不确定它是Java / Swing还是Wacom问题,可能是平板电脑没有注册点击,而是拖动事件,或者可能是那个摆动不正确地解释事件。

答案 3 :(得分:1)

多年前我向Sun报告了这个错误。它仍然没有修复。任何体面的ui框架都允许在新闻和发布之间进行一些移动以生成点击事件。在高dpi显示器上最大移动1个像素是非常荒谬的。这不仅是wacom平板电脑的问题,也就是老年人在点击时也难以保持鼠标静止。