Mouselistener على JFrame
-
05-07-2019 - |
سؤال
أريد أن أبلغ عن أحداث الماوس (وتحديداً الأحداث التي تم إدخالها وخرجها) على JFRAME. ولكن عندما أقوم بإضافة موسليستن ، أحصل على الأحداث على حدود الإطار وليس الإطار بأكمله مع محتوياته.
أي أفكار لماذا؟
تحرير: أو على الأقل هل لديك بديل؟ أريد طريقة "Gloabal" للقبض على أحداث الماوس على JFrame. ربما لم يكن الموسى هو الحل.
المحلول
يمكنك الحصول على جميع الأحداث والتحقق مما إذا كان مصدرها مكونًا في JFrame.
نصائح أخرى
هناك مكون غير مرئي يتراكب واجهة المستخدم الرسومية بأكملها ، "الجزء الزجاجي". يمكنك إرفاق مستمعيك بهذا. مثال:
JFrame frame = new JFrame();
Component glassPane = frame.getGlassPane();
glassPane.addMouseListener(myListener);
إذا كنت تريد أن تمر أحداثك المعتادة إلى المكونات الأساسية ، فيمكنك إعادة عرضها. فمثلا:
public void mouseMoved(MouseEvent e) {
redispatchMouseEvent(e, false);
}
لأن المحتويات (ربما jpanel) "تظليل" وتستهلك الأحداث ولا تصل إلى JFrame.
ما يمكنك فعله هو إضافة نفس المستمع إلى جميع الأطفال. يجب أن يكون هناك طريقة أفضل رغم ذلك.
بديل ل AWTEventListener
هو دفع EventQueue
. هذا له ميزة أن تطبيقات التطبيقات وتطبيق WebStart يمكنها القيام بذلك.