Головные боли отладки Java Swing с помощью графического планшета Wacom

StackOverflow https://stackoverflow.com/questions/752121

  •  09-09-2019
  •  | 
  •  

Вопрос

В течение нескольких лет я сталкивался с проблемой Java Swing + моего планшета Wacom Graphire в нескольких приложениях Java, а теперь столкнулся с ней и в своем собственном.

Я использую графический планшет, чтобы обойти проблемы с запястьем при щелчке мышью, и он отлично работает под Windows, за исключением случаев, когда я использую приложения Java.В Java-приложениях один щелчок пером работает неправильно.(Обычно проблема возникает только с диалоговыми окнами выбора файлов или древовидными элементами управления.) Перьевой планшет также поставляется с беспроводной мышью, которая работает с тем же планшетом, и ее одиночный щелчок работает правильно.

Я не знаю, связана ли проблема с драйвером WACOM, средой выполнения Java Swing для Windows или обоими.Кто-нибудь сталкивался с этим раньше?Я хотел бы отправить отчет об ошибке в WACOM, но понятия не имею, что им сказать.

Мне удалось воспроизвести это в моем собственном приложении, в котором есть JEditorPane с HTML-документом, к которому я добавил HyperlinkListener.Я получаю события HyperlinkEvent.ACTIVATED при каждом щелчке мыши, но НЕ получаю события HyperlinkEvent.ACTIVATED при каждом щелчке пером.

Одно большое различие между ручкой и мышью заключается в том, что когда вы нажимаете кнопку мыши, действительно легко вызвать щелчок кнопки без движения мыши.На графическом планшете это сделать очень сложно, и это, похоже, коррелирует с отсутствием событий HyperlinkEvent.ACTIVATED — если я буду очень осторожен и не буду менять положение пера при касании планшета, думаю, я смогу его АКТИВИРОВАТЬ. события.

Есть ли какие-нибудь предложения, что можно попробовать, чтобы я мог предоставить WACOM полезную информацию об этой ошибке?Очень досадно, что я не могу использовать перо с приложениями Java, тем более что перо отлично работает с «обычными» приложениями Windows (не Java).

Обычно я бы не стал задавать этот вопрос здесь, но мне бы хотелось узнать это у программист понять, что может происходить, чтобы я мог составить хороший отчет об ошибке.

Это было полезно?

Решение

Что вам нужно сделать, это добавить mouseListener и посмотреть, когда он зарегистрирует mouseClicked(), mousePressed(), mouseReleased() событие.Я не уверен, что качели считывают перо планшета как мышь.Тем не менее, это должно дать вам некоторое представление о том, что на самом деле происходит.

Другие советы

Я попробовал предложение доктора Манхэттена, и оно работает просто великолепно.Я правильно получаю события mousePressed/mouseReleased;События mouseClicked всегда происходят с помощью мыши перьевого планшета, но события 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);
    }
}

Думаю, вы уже сами получили ответ:Перемещение пера приводит к некоторому другому событию, кроме простого щелчка, возможно, к событию, подобному перетаскиванию.Я не уверен, является ли это проблемой Java/Swing или Wacom, возможно, планшет регистрирует не щелчки как таковые, а как события перетаскивания, или может быть, Swing неправильно интерпретирует события.

Я сообщил об этой ошибке много лет назад компании Sun.Это до сих пор не исправлено.Любая приличная структура пользовательского интерфейса позволит некоторое перемещение между нажатием и выпуском для генерации события щелчка.Максимальное перемещение на 1 пиксель на дисплее с высоким разрешением просто смешно.Это проблема не только планшетов wacom: пожилым людям также трудно удерживать мышь при нажатии.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top