سؤال

كتبت تطبيقًا حيث يمكنك سحب بعض الجدول الزمني لليسار واليمين. عندما أقوم بسحب ، أعلم أن هذا حدث mousedragged. منذ أن تحرك مؤشر الماوس الخارجي ، يتوقف عن السحب ، لكنني لا أريد ذلك.

لذلك أريد أن أقفل حدث Mousedragged بطريقة ما على هذا المكون ، ولكن إذا قمت بنقل المؤشر الخارجي ، فلن أحصل على حدث MusedRagged بعد الآن.

كيف يمكنني حل ذلك؟ أخبرني زميلي أن هناك بعض الوظائف مثل CaptureMouse.

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

المحلول

لا أعتقد أنه من الجيد التقاط الماوس. لا أعتقد أيضًا أنه من الضروري لما تريد.

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

إذا كان سلوك تطبيقك مختلفًا ، فربما يكون لديك خطأ مختلف في معالجة الماوس؟

على سبيل المثال ، جرب التطبيق في منتصف الطريق أسفل هذه الصفحة: سترى أنه يمكنك البدء في سحب المستطيل ونقل الماوس خارج منطقة التطبيق ، وسوف يستمر في العمل:http://www.dgp.toronto.edu/~mjmcguff/learn/java/04-mouseInput/

(لا أعرف مؤلف الكود أعلاه ؛ إنه مجرد واحد من أوائل التي وجدتها مع بحث جافا applet mousedragged.)

نصائح أخرى

أي جزء من "الجدول الزمني" الخاص بك هو المكون الفعلي الذي يتلقى حدث MusedRagged ()؟ عادةً عند تلقي هذا الحدث ، ستقوم بنقل المكون لمطابقة إجراء السحب - وبهذه الطريقة ، يجب أن يكون المكون دائمًا تحت الماوس ويتلقى دائمًا حدث MusedRagged () حتى تتركه. هل تنقل هذا المكون أثناء معالجة الأحداث؟ من شأن مستطيل صغير يشبه الزر المستخدمة كمنزلق أن يجعل مكونًا ممتازًا للاستخدام.

(إذا كنت تحاول التعامل مع الجدول الزمني بالكامل كمكون وبالتالي لا تنقله للمطابقة ، فماذا تريد أن يحدث إذا سحب المستخدم الماوس أثناء الخارج؟)

على الرغم من أن Windows (وربما البعض الآخر) تدعم التقاط الماوس ، إلا أن Java لا يبدو. قد تكون قادرًا على تقديم قائمة انتظار مخصصة لما حدث مثل هذا:

Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener()
    {
        public void eventDispatched(AWTEvent e)
        {
            // Look for mouse messages and handle them... 
        }

    }
, AWTEvent.MOUSE_MOTION_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK);
JComponent.setAutoScrolls(...);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top