2009-04-15 5 views
2

Я несколько лет сталкивался с проблемой Java Swing + моего планшета Wacom Graphire в нескольких Java-приложениях и теперь встречаюсь с ним самостоятельно.java Swing отлаживает головные боли с помощью планшета Wacom

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

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

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

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

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

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

ответ

4

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

+0

Отлично!Раньше я не использовал mouseListener, но он работал как шарм. –

1

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

2

Я попробовал предложение dr.manhattan и работает как шарм. Я правильно поняла 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

Я сообщил об этой ошибке много лет назад Солнцу. Он все еще не исправлен. Любая достойная среда ui позволит некоторое перемещение между прессой и релизом для создания события щелчка. Максимальное перемещение 1 пикселя на дисплее с высоким разрешением - просто смешно. Это не только проблема с планшетами wacom, т. Е. У пожилых людей также есть проблемы с тем, чтобы мышь оставалась при нажатии.