سؤال

لقد صنعت مجموعة كاملة من JLabels وأود أن أضيف مستمع لهم.

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

شكرا للقراءة.

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

المحلول

إذا تمت إضافة ملصقاتك إلى حاوية (مثل JPanel)، يمكنك إضافة مستمع لهذه الحاوية ومعرفة المكون الموجود في موقع معين.

JPanel panel = new JPanel();
panel.addMouseListener( whichOneListener );
f.setContentPane( panel );

في هذه الحالة، استخدم Mouselistener لأن ذلك أعطني الموقع الذي نقر فيه المستخدم.

private static MouseListener whichOneListener = new MouseAdapter() {
    public void mouseClicked( MouseEvent e ) {
        JComponent c = ( JComponent ) e.getSource();
        JLabel l  = ( JLabel ) c.getComponentAt( e.getPoint() );
        System.out.println( l.getText() );
    }

};

ويطبع بشكل صحيح ما تم النقر فوق المكون.

شفرة المصدر الكامل هي هنا

نصائح أخرى

لا يوجد أي من محلول مربع، afaik. بصرف النظر عن استخدام الخارقة الغبية، أعتقد أنك قد تضطر إلى استخدام a لحلقة، وقد يكون رمز السطر 10، لا شيء يدعو للقلق.

يمكنك التفاف صفيفك من Jlabels في الفصل وتنفيذ طريقة الإضافة الخاصة بك التي تسجل المستمع عند إضافةها.

وبهذه الطريقة لن تضطر إلى تكرارها بعد ذلك ..

يمكنك تسجيل المستمع على JPANEL (أو أيا كان المكونات الموجودة في)، لذلك عليك فقط كتابة مستمع واحد.

إذا كانت قائمة من Jlabels، أود أن أقترح باستخدام collectionutils.flalldo. - الطريقة التي تتيح لك تطبيق نفس الإجراء على مجموعة من الكائنات.

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