الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Events and event listeners

بدأه Game111 في 19 مايو 2011 · 1 رد · 479 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اتمنى ان لا اكون قد ثقلت عليكم و لكن لابد ان اكون على دراية تامة من جميع جوانب المشروع حتى يكتمل لذلك سأفتح نقاش حول الاحداث و مصدرها و تمثيلها و مسجلوها في الجافا

اذا اردنا تعريف كلاس يكون من نوع الذي يحتوي على احداث لابد ان نعرفه مع الانترفيس ActionListener و حينها يكون الاوبجكت التابع لهذا الكلاس عبارة عن مسجل لحدث ما و نربطه مع احدى مكونات الواجهة (Buottun , Combo box......)

و الانترفيس ActionListener تحتوي على ميثود actionPeformed تستدعى بشكل تلقائي في كل مرة يحدث حدث معين

لدي هذا الكود

 import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;

/**
 *
 * @author NEW
 */
public class NewClass   {
    public static void event()
    {
        JFrame frame1 = new JFrame("JAVA");
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       JButton sourceEvent=new JButton();
 frame1.getContentPane().add(sourceEvent);

frame1.setVisible(true);
frame1.pack();
sourceEvent.addActionListener(new ActionListener(){

      public void actionPerformed(ActionEvent e) {
          System.out.println("you have clicked");

    }
});
    }
    public static void main(String[]args)
    {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                event();
            }
        });
    }

}

هذا برنامج بسيط يقوم بإخبارك في كل مرة تكبس الزر ,, اريد ان افهم آلية عمله و خصوصا في main method

تم تعديل هذه المشاركة بواسطة Game111 في 19 مايو 2011 في 13:32

#2

اولا في الدالة main لقد قمت بعمل thread جديد ، طبعا كل برامج جافا تعمل على الاقل على thread وهو main thread بينما عندك هنا قمت بتشغيل برنامجك على

thread اخر ، لماذا؟ حسب شركة sun يفضل استخدام thread منفصل لاستدعاء الرسوميات حتى لا تحدث استدعاءات الاحداث الكثيرة ازدحاما في queue فمن الافضل ان تشغل مباشرة

على event queue طبعا لقد قمت بتمرير thread الى الداله invoke later

بالنسبة لسؤالك في البداية ، ليس من الضروري ان يكون مسجل الاحداث يعمل implementation للاكشن ليستنر ، فهناك itemlistener وغيره من انواع الاحداث

لكي تجعل الزر يستجيب للاحداث يجب ان تضيف listener له والlistener سوف يستجيب للاحداث التي تمرر لهذا الزر

الدالة action performed تستدعى عند الضغط مرتين double click على الزر ، ولكن لو كنت تتعامل مع JList او غيره ربما لن تستخدم هذه الداله ، مثل ما قلت

الامر يعتمد على نوع listener الذي تريده ان تعمل له implementation

طبعا في الاستدعاء sourcevent.addActionListener

لقد قمت بتعريف inner class يعمل implementation للاكشن ليستنر وانا افترض انك تعلم هذا مسبقا

تم تعديل هذه المشاركة بواسطة mental-driller في 19 مايو 2011 في 17:19

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

مواضيع مشابهة