سؤال

لقد كنت أشعر بالتشغيل ضد مشكلة مع Java Swing + My Wacom Graphire Tablet لبضع سنوات في العديد من تطبيقات Java واجهها الآن بمفردي.

يمكنني استخدام قرص القلم للدخول حول مشكلات الرسغ أثناء النقر فوق الماوس، ويعمل بشكل جيد تحت Windows إلا عند استخدام تطبيقات Java. في تطبيقات Java، لا يعمل بنقرة واحدة من القلم بشكل صحيح. (عادة ما تحدث المشكلة فقط مع مربعات حوار اختيار الملفات أو عناصر تحكم الأشجار.) يأتي قرص القلم أيضا باستخدام فأرة لاسلكية يعمل مع نفس الجهاز اللوحي، ونقرة واحدة تعمل بشكل صحيح.

لا أعرف ما إذا كانت المشكلة موجودة في برنامج تشغيل Wacom أو في وقت تشغيل Java Swing لنظام التشغيل Windows أو كليهما. هل قابل هذا احد من قبل؟ أود تقديم تقرير خطأ مع Wacom ولكن ليس لدي أي فكرة عما أخبرهم به.

لقد تمكنت من إعادة إنتاج هذا في طلبي الخاص الذي يحتوي على JEDITRINPANE مع مستند HTML قمت بإضافة HyperlinkLostener إلى. أحصل على الأحداث المشبعة.

فرق كبير واحد بين القلم والماوس هو أنه عند النقر فوق زر على الماوس، من السهل حقا أن يؤدي النقر فوق الزر بدون حركة الماوس. على الكمبيوتر اللوحي، من الصعب جدا القيام بذلك، ويبدو أنه يرتبط بعدم وجود أحداث Hyperlinkent.Activated - إذا كنت حذرا للغاية لعدم تحريك موضع القلم عندما أقوم بالنقر فوق الجهاز اللوحي، وأعتقد أنني أستطيع التنشيط الأحداث.

أي اقتراحات للأشياء التي يجب تجربتها حتى أتمكن من إعطاء Wacom بعض المعلومات الجيدة حول هذا الخطأ؟ إنه أمر محبط حقا عدم أن يكون قادرا على استخدام قلمي مع تطبيقات Java، خاصة وأن القلم يعمل بشكل جيد مع تطبيقات Windows (غير Java) "العادية".

عادة لن أطرح هذا السؤال هنا ولكن أود معرفة ذلك من مبرمج وجهة نظر ما قد يحدث حتى أتمكن من تقديم تقرير أخطاء جيد.

هل كانت مفيدة؟

المحلول

ما يجب أن تفعله هو إضافة mouseListener وانظر عندما يسجل mouseClicked(), mousePressed(), mouseReleased() حدث. لست متأكدا مما إذا كان الأرجوحة يقرأ القلم اللوحي كماوس رغم ذلك. ومع ذلك، يجب أن تعطيك بعض البصيرة ما يحدث في الواقع.

نصائح أخرى

حاولت اقتراح Dr.manhattan ويعمل مثل سحر. أحصل على الأحداث المولودة / mousereaded بشكل صحيح؛ أحداث 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، فقد يكون هذا الجهاز اللوحي لا يسجل النقرات على هذا النحو، ولكن كأحداث السحب، أو يمكن أن يكون التأرجح يفسر الأحداث بشكل غير صحيح.

أبلغت هذا الخطأ منذ سنوات عديدة إلى Sun. لا يزال غير ثابت. سيسمح أي إطار لائق UI ببعض الحركة بين الصحافة والإفراج عن إنشاء حدث نقرة. الحد الأقصى لحركة 1 بكسل على شاشة DPI عالية أمر مثير للسخرية. ليست مشكلة مع أقراص Wacom، أي أن كبار السن لديهم صعوبات في الاحتفاظ بالماوس لا يزال عند النقر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top