Pregunta

He estado corriendo frente a un problema con Java swing + mi tableta Wacom Graphire durante algunos años en varias aplicaciones Java y ahora he encontrado en mi propia.

Yo uso una tableta de lápiz de moverse por cuestiones de muñeca mientras hace clic en un ratón, y funciona bien en Windows, excepto cuando estoy usando aplicaciones Java. En las aplicaciones Java, la única clic con el botón de la pluma no funciona correctamente. (Por lo general, el problema sólo se produce con los cuadros de diálogo de selección de archivo o controles de árbol.) La pen tablet también viene con un ratón inalámbrico que funciona con la misma tableta, y su único clic con el botón funciona correctamente.

No sé si el problema está en el controlador WACOM o en el tiempo de ejecución de Java Swing para Windows o ambos. ¿Alguien encontró esto antes? Me gustaría presentar un informe de error con WACOM pero no tengo ni idea de lo que les diga.

He sido capaz de reproducir esto en mi propia aplicación que tiene un JEditorPane con un documento HTML que he añadido un HyperlinkListener a. Se añaden eventos HyperlinkEvent.ACTIVATED en cada solo clic con el ratón, pero no consigo a eventos HyperlinkEvent.ACTIVATED en cada solo clic con el lápiz.

Una gran diferencia entre un lápiz y un ratón es que cuando se hace clic en un botón de un ratón, que es muy fácil de hacer que el botón del ratón y sin movimiento del ratón. En la pen tablet es muy difícil de hacer esto, y que parece que se correlaciona con la falta de eventos HyperlinkEvent.ACTIVATED - si yo soy muy cuidadoso de no mover la posición del lápiz cuando toco la tableta, creo que puedo conseguir activados eventos.

¿Alguna sugerencia sobre qué tratan por lo que pueden dar WACOM una buena información sobre este error? Es muy frustrante no poder utilizar mi pluma con aplicaciones Java, sobre todo porque el lápiz funciona bien con aplicaciones "normales" de Windows (no Java).

Normalmente no me haga esta pregunta aquí, pero me gustaría averiguar a través de un punto de vista del programador de lo que podría estar pasando para que pueda presentar un buen informe de error.

¿Fue útil?

Solución

Lo que debe hacer es añadir un mouseListener y ver cuando se registra un mouseClicked(), mousePressed(), mouseReleased() evento. No estoy seguro de si el swing lee el lápiz de Tablet PC como un ratón sin embargo. Sin embargo, debe darle una idea de lo que realmente está pasando.

Otros consejos

He intentado la sugerencia de dr.manhattan y funciona como un encanto. Consigo mousePressed / mouseReleased eventos correctamente; mouseClicked eventos suceden siempre con el ratón pen tablet, pero mouseClicked eventos no ocurren con la pluma a menos que me las arreglo para mantener la pluma muy quieto. Incluso un movimiento de 1 píxel es suficiente para hacer que falle. Creo que debería culpar Java para éste: no hay manera de especificar un "radio de clic" para el movimiento 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);
    }
}

Creo que ya tiene la respuesta usted mismo: Mover los resultados pluma en algún otro evento que un simple clic, quizá tal vez un arrastrar y soltar como evento. No estoy seguro de si se trata de una aplicación Java / Swing o un problema de Wacom, podría ser que la tableta no registra los clics como tal, sino como eventos de arrastre, o podría ser que la oscilación interpreta los acontecimientos de forma incorrecta.

Me informó este error hace muchos años a Sun. Todavía no es fijo. Cualquier marco de interfaz de usuario decente permitirá un cierto movimiento entre una prensa y publicación para generar un evento de clic. Un movimiento máximo de 1 píxel en una pantalla de alta ppp es simplemente ridículo. No es sólo un problema con tabletas Wacom, es decir, las personas mayores también tienen dificultades para mantener el ratón aún cuando se hace clic.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top