Domanda

Ho corso contro un problema con Java Swing + mia tavoletta Wacom Graphire per alcuni anni in diverse applicazioni Java e ora ho incontrato nel mio.

io uso una tavoletta grafica per aggirare i problemi del polso mentre si fa clic del mouse, e funziona benissimo sotto Windows, tranne quando sto usando applicazioni Java. Nelle applicazioni Java, il singolo-click della penna non funziona correttamente. (Di solito il problema si verifica solo con le finestre di dialogo di selezione file o controlli albero.) La pen tablet viene fornito con un mouse wireless che funziona con la stessa tavoletta, e il suo singolo-click funziona correttamente.

Non so se il problema è nel driver WACOM o in altalena runtime Java per Windows o entrambi. Qualcuno ha incontrato questo prima? Mi piacerebbe presentare un bug report con WACOM, ma non ho idea di cosa dire loro.

Sono stato in grado di riprodurre questo nella mia propria applicazione che ha un JEditorPane con un documento HTML che ho aggiunto un HyperlinkListener a. Ottengo eventi HyperlinkEvent.ACTIVATED su ogni singolo click con il mouse, ma non ottengo eventi HyperlinkEvent.ACTIVATED su ogni singolo scatto con la penna.

Una grande differenza tra una penna e un mouse è che quando si fa clic su un pulsante su un mouse, è davvero facile da causare il pulsante del mouse, senza il movimento del mouse. Sulla pen tablet è molto difficile fare questo, e che sembra correlare con la mancanza di eventi HyperlinkEvent.ACTIVATED - se sono molto attento a non spostare la posizione della penna quando si tocca l'tavoletta, credo di poter si attivano eventi.

Tutti i suggerimenti per cose da provare in modo da posso dare WACOM alcune buone informazioni su questo bug? E 'davvero frustrante non essere in grado di usare la mia penna con applicazioni Java, tanto più che la penna funziona bene con le applicazioni "normali" di Windows (non-Java).

Normalmente non mi fare questa domanda qui, ma mi piacerebbe sapere da un punto di vista del programmatore quello che potrebbe essere in corso in modo da poter presentare una buona segnalazione.

È stato utile?

Soluzione

Che cosa si dovrebbe fare è aggiungere un mouseListener e vedere quando si registra un mouseClicked(), mousePressed(), evento mouseReleased(). Non sono sicuro se l'oscillazione di legge la penna del Tablet PC come mouse però. Tuttavia, si dovrebbe dare alcune indicazioni su ciò che sta realmente accadendo.

Altri suggerimenti

Ho provato il suggerimento di dr.manhattan e funziona come un fascino. Ottengo mousePressed / mouseReleased correttamente i fatti; eventi mouseClicked avvengono sempre con la tavoletta del mouse penna, ma mouseClicked eventi non accadono con la penna a meno che non riesco a tenere la penna molto ancora. Anche un movimento di 1-pixel è sufficiente per renderlo sicuro. Credo che dovrei colpa Java per questo: non c'è modo di specificare un "click raggio" per il movimento 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);
    }
}

Credo che hai già avuto la risposta da soli: Spostare i risultati penna in qualche altro evento di un semplice click, forse forse un drag and drop come evento. Non sono sicuro che si tratti di un Java / Swing o un problema di Wacom, potrebbe essere che il tablet non registra i clic in quanto tale, ma come eventi di trascinamento, o potrebbe essere quello swing interpreta gli eventi in modo non corretto.

Ho segnalato questo bug molti anni fa a Sun. E ancora non è fisso. Ogni quadro ui decente permetterà un certo movimento tra una premere e rilasciare per generare un evento click. Un movimento massimo di 1 pixel su un display ad alta dpi è semplicemente ridicolo. Non è solo un problema con tavolette Wacom, vale a dire le persone anziane hanno anche difficoltà a tenere il mouse ancora quando si fa clic.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top