отладка java Swing с помощью планшета Wacom - PullRequest
2 голосов
/ 15 апреля 2009

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

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

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

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

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

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

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

Ответы [ 4 ]

4 голосов
/ 15 апреля 2009

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

2 голосов
/ 15 апреля 2009

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

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

1 голос
/ 15 апреля 2009

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

...