Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Learn Typing

Swingالإنترفيس FocusListener

الإنترفيس FocusListener يستخدم للإشارة إلى الشيء الحالي الذي يتفاعل معه المستخدم و الذي يمكنه التحكم به من خلال الكيبورد.

الإنترفيس FocusListener يحتوي على دالتين يجب أن تفعل لهما Override عند إنشاء كائن منه:

  • الدالة focusGained(FocusEvent e): يتم إستدعاءها عندما يقوم المستخدم بالنقر داخل شيء.
  • الدالة focusLost(FocusEvent e): يتم إستدعاءها عنما يقوم المستخدم بالنقر خارج الشيء الذي كان يتعامل معه.

مثال

Main.java
import java.awt.Color;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("FocusListener demo"); // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس
JLabel nameLabel = new JLabel("Name"); // nameLabel إسمه Label هنا أنشأنا
JLabel passLabel = new JLabel("Password"); // passLabel إسمه Label هنا أنشأنا
JTextField nameField = new JTextField(); // nameField إسمه Text Field هنا أنشأنا
JPasswordField passField = new JPasswordField(); // passField إسمه Text Field هنا أنشأنا
nameLabel.setBounds(30, 50, 60, 25); // frame في الـ nameLabel هنا قمنا بتحديد حجم و موقع الكائن
nameField.setBounds(100, 50, 150, 25); // frame في الـ nameField هنا قمنا بتحديد حجم و موقع الكائن
passLabel.setBounds(30, 90, 60, 25); // frame في الـ passLabel هنا قمنا بتحديد حجم و موقع الكائن
passField.setBounds(100, 90, 150, 25); // frame في الـ passField هنا قمنا بتحديد حجم و موقع الكائن
frame.add(nameLabel); // frame في الـ nameLabel هنا أضفنا الكائن
frame.add(nameField); // frame في الـ nameField هنا أضفنا الكائن
frame.add(passLabel); // frame في الـ passLabel هنا أضفنا الكائن
frame.add(passField); // frame في الـ passField هنا أضفنا الكائن
// خصيصاً لتغيير لون خلفية أي مربع نص يتعامل معه المستخدم حالياً fl أنشأنا هذا الكائن
FocusListener fl = new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
// هنا قلنا أنه سيتم تلوين خلفية مربع النص الحالي الذي يمكن الكتابة فيه بالأصفر
e.getComponent().setBackground(Color.yellow);
}
@Override
public void focusLost(FocusEvent e) {
// هنا قلنا أنه سيتم تلوين خلفية مربع النص الذي لم يعد يتفاعل معه المستخدم باللون الأبيض
e.getComponent().setBackground(Color.white);
}
};
nameField.addFocusListener(fl); // fl بالحدث nameField هنا ربطنا الكائن
passField.addFocusListener(fl); // fl بالحدث nameField هنا ربطنا الكائن
frame.setSize(300, 200); // هنا قمنا بتحديد حجم النافذة. عرضها 300 و طولها 200
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
frame.setLayout(null); // لذلك قمنا بتحديد مكان كل شيء قمنا بإضافته في النافذة Layout Manager أي لم نستخدم أي null هنا وضعنا
frame.setVisible(true); // هنا جعلنا النافذة مرئية
}
}
import java.awt.Color; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import javax.swing.JLabel; import javax.swing.JFrame; import javax.swing.JPasswordField; import javax.swing.JTextField; public class Main { public static void main(String[] args) { JFrame frame = new JFrame("FocusListener demo"); // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس JLabel nameLabel = new JLabel("Name"); // nameLabel إسمه Label هنا أنشأنا JLabel passLabel = new JLabel("Password"); // passLabel إسمه Label هنا أنشأنا JTextField nameField = new JTextField(); // nameField إسمه Text Field هنا أنشأنا JPasswordField passField = new JPasswordField(); // passField إسمه Text Field هنا أنشأنا nameLabel.setBounds(30, 50, 60, 25); // frame في الـ nameLabel هنا قمنا بتحديد حجم و موقع الكائن nameField.setBounds(100, 50, 150, 25); // frame في الـ nameField هنا قمنا بتحديد حجم و موقع الكائن passLabel.setBounds(30, 90, 60, 25); // frame في الـ passLabel هنا قمنا بتحديد حجم و موقع الكائن passField.setBounds(100, 90, 150, 25); // frame في الـ passField هنا قمنا بتحديد حجم و موقع الكائن frame.add(nameLabel); // frame في الـ nameLabel هنا أضفنا الكائن frame.add(nameField); // frame في الـ nameField هنا أضفنا الكائن frame.add(passLabel); // frame في الـ passLabel هنا أضفنا الكائن frame.add(passField); // frame في الـ passField هنا أضفنا الكائن // خصيصاً لتغيير لون خلفية أي مربع نص يتعامل معه المستخدم حالياً fl أنشأنا هذا الكائن FocusListener fl = new FocusListener() { @Override public void focusGained(FocusEvent e) { // هنا قلنا أنه سيتم تلوين خلفية مربع النص الحالي الذي يمكن الكتابة فيه بالأصفر e.getComponent().setBackground(Color.yellow); } @Override public void focusLost(FocusEvent e) { // هنا قلنا أنه سيتم تلوين خلفية مربع النص الذي لم يعد يتفاعل معه المستخدم باللون الأبيض e.getComponent().setBackground(Color.white); } }; nameField.addFocusListener(fl); // fl بالحدث nameField هنا ربطنا الكائن passField.addFocusListener(fl); // fl بالحدث nameField هنا ربطنا الكائن frame.setSize(300, 200); // هنا قمنا بتحديد حجم النافذة. عرضها 300 و طولها 200 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج frame.setLayout(null); // لذلك قمنا بتحديد مكان كل شيء قمنا بإضافته في النافذة Layout Manager أي لم نستخدم أي null هنا وضعنا frame.setVisible(true); // هنا جعلنا النافذة مرئية } }

ستظهر لك النافذة التالية عند التشغيل.

لاحظ أنه دائماً سيتم تلوين لون خلفية الـ Text Field الحالي الذي تتفاعل معه بالأصفر.

مثال يشرح طريقة تعريف الحدث FocusListener في جافا