Question

Je dirige contre un problème avec Java Swing + ma tablette Wacom Graphire pendant quelques années dans plusieurs applications Java et ai rencontré dans mon maintenant propre.

J'utilise une tablette à stylet pour contourner les problèmes de poignet en cliquant une souris, et il fonctionne très bien sous Windows, sauf lorsque j'utilise des applications Java. Dans les applications Java, le seul clic du stylet ne fonctionne pas correctement. (En général, le problème se produit uniquement avec des boîtes de dialogue de sélection de fichiers ou commandes d'arbres.) La tablette à stylet est également livré avec une souris sans fil qui fonctionne avec le même comprimé, et son seul clic ne fonctionne correctement.

Je ne sais pas si le problème est dans le pilote WACOM ou dans le moteur d'exécution Java Swing pour Windows ou les deux. Quelqu'un at-il rencontré avant? Je voudrais déposer un rapport de bogue avec WACOM, mais je ne sais pas quoi leur dire.

Je suis en mesure de reproduire cela dans ma propre application qui a un JEditorPane avec un document HTML que j'ai ajouté un HyperlinkListener à. Je reçois des événements HyperlinkEvent.ACTIVATED sur chaque clic avec la souris, mais je ne suis pas d'événements HyperlinkEvent.ACTIVATED sur chaque simple clic avec le stylo.

Une grande différence entre un stylo et une souris est que lorsque vous cliquez sur un bouton sur une souris, il est vraiment facile de faire le bouton clic sans mouvement de la souris. Sur la tablette à stylet, il est très difficile de le faire, et qui semble être en corrélation avec le manque d'événements HyperlinkEvent.ACTIVATED - si je suis très prudent de ne pas déplacer la position du stylet lorsque je tape la tablette, je pense que je peux me ACTIVATED événements.

Toutes les suggestions pour choses à essayer si je peux donner WACOM quelques bonnes informations sur ce bug? Il est vraiment frustrant de ne pas être en mesure d'utiliser mon stylo avec des applications Java, d'autant plus que le stylo fonctionne très bien avec les applications Windows « réguliers » (non-Java).

Normalement, je ne voudrais pas poser cette question ici, mais je voudrais savoir à partir d'un du programmeur point de vue de ce qui pourrait se passer si je peux déposer un rapport de bug.

Était-ce utile?

La solution

Ce que vous devez faire est d'ajouter un mouseListener et voir quand il enregistre un mouseClicked(), mousePressed(), événement mouseReleased(). Je ne sais pas si le swing lit le stylet comme une souris bien. Cependant, il devrait vous donner un aperçu de ce qui se passe réellement.

Autres conseils

J'ai essayé la suggestion de dr.manhattan et fonctionne comme un charme. Je reçois mousePressed / mouseReleased correctement les événements; les événements se produisent mouseClicked toujours avec la souris tablette à stylet, mais mouseClicked événements ne se produisent pas avec la plume à moins que je parviens à garder le stylo immobile. Même un mouvement de 1 pixel est suffisant pour le faire échouer. Je suppose que je devrais blâmer Java pour celui-ci: il n'y a aucun moyen de spécifier un « rayon de clic » pour le mouvement 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);
    }
}

Je pense que vous avez déjà obtenu la réponse vous-même: Déplacer les résultats de stylo dans un autre événement qu'un simple clic, peut-être peut-être un glisser-déposer comme événement. Je ne suis pas sûr que ce soit un Java / Swing ou un problème Wacom, il se pourrait que la tablette n'enregistre pas les clics en tant que tels mais comme des événements de glisser, ou il se pourrait que balançoire interprète les événements de manière incorrecte.

Je l'ai signalé ce bug il y a plusieurs années à Sun. Il est toujours pas fixé. Tout cadre ui décent permettra un mouvement entre une presse et la libération pour générer un événement de clic. Un mouvement maximum de 1 pixel sur un écran haute dpi est tout simplement ridicule. Il est non seulement un problème avec des comprimés de wacom, à savoir les personnes âgées ont également des difficultés à garder la souris encore en cliquant sur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top