سؤال

أريد أن أبلغ عن أحداث الماوس (وتحديداً الأحداث التي تم إدخالها وخرجها) على JFRAME. ولكن عندما أقوم بإضافة موسليستن ، أحصل على الأحداث على حدود الإطار وليس الإطار بأكمله مع محتوياته.

أي أفكار لماذا؟

تحرير: أو على الأقل هل لديك بديل؟ أريد طريقة "Gloabal" للقبض على أحداث الماوس على JFrame. ربما لم يكن الموسى هو الحل.

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

المحلول

يمكنك الحصول على جميع الأحداث والتحقق مما إذا كان مصدرها مكونًا في JFrame.

نرى Toolkit.addawteventListener

نصائح أخرى

هناك مكون غير مرئي يتراكب واجهة المستخدم الرسومية بأكملها ، "الجزء الزجاجي". يمكنك إرفاق مستمعيك بهذا. مثال:

JFrame frame = new JFrame();
Component glassPane = frame.getGlassPane();
glassPane.addMouseListener(myListener);

إذا كنت تريد أن تمر أحداثك المعتادة إلى المكونات الأساسية ، فيمكنك إعادة عرضها. فمثلا:

public void mouseMoved(MouseEvent e) {
    redispatchMouseEvent(e, false);
}

لأن المحتويات (ربما jpanel) "تظليل" وتستهلك الأحداث ولا تصل إلى JFrame.

ما يمكنك فعله هو إضافة نفس المستمع إلى جميع الأطفال. يجب أن يكون هناك طريقة أفضل رغم ذلك.

بديل ل AWTEventListener هو دفع EventQueue. هذا له ميزة أن تطبيقات التطبيقات وتطبيق WebStart يمكنها القيام بذلك.

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