JavaFX এ ইভেন্ট হ্যান্ডলিং হল একটি গুরুত্বপূর্ণ অংশ, যা ইউজার ইন্টারঅ্যাকশন (যেমন বোতাম ক্লিক, কী প্রেস, মাউস মুভ) থেকে সিস্টেমের রেসপন্স তৈরি করে। JavaFX এ ইভেন্ট হ্যান্ডলিং ব্যবহার করে আপনি বিভিন্ন ধরণের ইউজার ইনপুটের জন্য হ্যান্ডলার সেট করতে পারেন এবং সেগুলির প্রতিক্রিয়া তৈরি করতে পারেন।
JavaFX এ ইভেন্ট হ্যান্ডলিং চারটি প্রধান অংশে বিভক্ত:
JavaFX এর ইভেন্ট হ্যান্ডলিং EventHandler
ইন্টারফেসের মাধ্যমে সম্পাদিত হয়। এটি বিভিন্ন ধরনের ইভেন্ট যেমন ActionEvent
, MouseEvent
, KeyEvent
ইত্যাদি হ্যান্ডল করতে পারে।
এখানে একটি সাধারণ JavaFX অ্যাপ্লিকেশন উদাহরণ দেয়া হলো যেখানে ইভেন্ট হ্যান্ডলিং ব্যবহার করা হয়েছে। এই প্রোগ্রামে একটি বাটন ক্লিক করার পর একটি লেবেলে বার্তা প্রদর্শিত হবে।
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class EventHandlingExample extends Application {
@Override
public void start(Stage primaryStage) {
// বাটন এবং লেবেল তৈরি করা
Button btn = new Button("Click Me!");
Label label = new Label();
// বাটনে ইভেন্ট হ্যান্ডলার যোগ করা (ActionEvent)
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
// বাটন ক্লিক হলে লেবেলে বার্তা দেখানো
label.setText("Button was clicked!");
}
});
// StackPane তৈরি করা এবং বাটন ও লেবেল যোগ করা
StackPane root = new StackPane();
root.getChildren().addAll(btn, label);
// সীন তৈরি করা এবং প্রাইমারি স্টেজে সেট করা
Scene scene = new Scene(root, 300, 200);
primaryStage.setTitle("JavaFX Event Handling Example");
primaryStage.setScene(scene);
// স্টেজটি দেখানো
primaryStage.show();
}
public static void main(String[] args) {
launch(args); // অ্যাপ্লিকেশন চালু করা
}
}
Button
এবং Label
তৈরি:Button
তৈরি করা হয়েছে যা ক্লিক করার জন্য একটি ইউজার ইন্টারফেস উপাদান হিসেবে ব্যবহৃত হবে।Label
তৈরি করা হয়েছে যা বাটন ক্লিক করার পর একটি বার্তা প্রদর্শন করবে।setOnAction
Method:Button
এ একটি ActionEvent হ্যান্ডল করতে ব্যবহৃত হয়।EventHandler<ActionEvent>
Interface:EventHandler<ActionEvent>
ব্যবহার করা হয়েছে যা ActionEvent
ধরনটি হ্যান্ডল করতে সক্ষম। handle()
মেথডটি তখন কল হয় যখন ইভেন্ট ঘটবে।StackPane
ব্যবহার করা হয়েছে যেটি একটি সাধারণ লেআউট ম্যানেজার যা উপাদানগুলিকে একে অপরের উপরে স্তূপীকৃত করে।Scene
এবং Stage
:Scene
তৈরি করা হয়েছে এবং সেটি Stage
-এ সেট করা হয়েছে, যা উইন্ডোটি দেখানোর জন্য ব্যবহৃত হয়।JavaFX বিভিন্ন ধরনের ইভেন্ট হ্যান্ডলিং সমর্থন করে। এখানে কিছু সাধারণ ইভেন্ট হ্যান্ডলিং এর ধরন দেয়া হল:
ActionEvent:
ActionEvent
ইভেন্ট সাধারণত তখন ট্রিগার হয় যখন একটি ইউজার ইন্টারঅ্যাকশন ঘটে, যেমন বাটন ক্লিক, মেনু নির্বাচন ইত্যাদি।উদাহরণ:
btn.setOnAction(event -> {
System.out.println("Button clicked!");
});
MouseEvent:
উদাহরণ:
btn.setOnMouseClicked(event -> {
System.out.println("Mouse clicked on button");
});
KeyEvent:
উদাহরণ:
scene.setOnKeyPressed(event -> {
System.out.println("Key pressed: " + event.getText());
});
DragEvent:
উদাহরণ:
btn.setOnDragDetected(event -> {
System.out.println("Drag detected");
});
ResizeEvent:
উদাহরণ:
scene.setOnResize(event -> {
System.out.println("Scene resized");
});
Java 8 এর Lambda Expressions ব্যবহার করে JavaFX এর ইভেন্ট হ্যান্ডলিং আরও সহজ এবং সুন্দর করা যায়।
btn.setOnAction(event -> label.setText("Button clicked using Lambda!"));
JavaFX এর ইভেন্ট হ্যান্ডলিং ব্যবহার করে আপনি সহজেই ইউজার ইন্টারঅ্যাকশনের জন্য প্রতিক্রিয়া তৈরি করতে পারেন। এটি ব্যবহারকারীর অ্যাপ্লিকেশন ব্যবহারের অভিজ্ঞতাকে উন্নত করে এবং বিভিন্ন ধরণের ইভেন্টের মাধ্যমে ইউজার ইন্টারফেসকে প্রোঅ্যাকটিভ ও ইন্টারঅ্যাকটিভ করে তোলে।
JavaFX এ Event Handling হল JavaFX অ্যাপ্লিকেশনগুলিতে ইউজারের ইন্টারঅ্যাকশন (যেমন ক্লিক, কিবোর্ড ইনপুট, মাউস মুভমেন্ট ইত্যাদি) পরিচালনা করার প্রক্রিয়া। JavaFX এ Event Handling ব্যবস্থাপনা একটি শক্তিশালী সিস্টেমের মাধ্যমে করা হয়, যেখানে আপনি ইভেন্ট লিসেনার এবং হ্যান্ডলার ব্যবহার করে বিভিন্ন ধরনের ইভেন্ট (যেমন ক্লিক, হোভার, কীবোর্ড এন্ট্রি) ট্রিগার করতে পারেন এবং সেগুলির প্রতিক্রিয়া নির্ধারণ করতে পারেন।
Button
বা TextField
যা ইউজারের ইন্টারঅ্যাকশন থেকে ইভেন্ট তৈরি করে।ActionEvent
(যেমন বাটন ক্লিক)MouseEvent
(যেমন মাউস ক্লিক, মাউস মুভ)KeyEvent
(যেমন কীবোর্ড ইনপুট)DragEvent
(যেমন ড্র্যাগ এবং ড্রপ)এটি একটি সাধারণ বাটন ক্লিক ইভেন্ট হ্যান্ডলিং উদাহরণ:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class ButtonClickEventExample extends Application {
@Override
public void start(Stage primaryStage) {
// একটি বাটন তৈরি করা
Button btn = new Button("Click Me");
// বাটনে ইভেন্ট হ্যান্ডলার যোগ করা
btn.setOnAction(event -> {
System.out.println("Button Clicked!");
});
// StackPane লেআউট তৈরি করা
StackPane root = new StackPane();
root.getChildren().add(btn);
// Scene তৈরি এবং সেট করা
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Button Click Event Example");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
setOnAction()
মেথডটি একটি ActionEvent
তৈরি করে এবং ইভেন্টের জন্য একটি হ্যান্ডলার নির্ধারণ করে। এটি বাটন ক্লিক করার পর "Button Clicked!"
মেসেজটি কনসোলে প্রিন্ট করবে।এখানে একটি মাউস ক্লিক ইভেন্ট হ্যান্ডলিং উদাহরণ দেওয়া হয়েছে:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class MouseEventExample extends Application {
@Override
public void start(Stage primaryStage) {
// একটি টেক্সট তৈরি করা
Text text = new Text("Click anywhere in the window!");
// MouseEvent এর জন্য হ্যান্ডলার যোগ করা
text.setOnMouseClicked(event -> {
System.out.println("Mouse clicked at: " + event.getX() + ", " + event.getY());
});
// StackPane লেআউট তৈরি করা
StackPane root = new StackPane();
root.getChildren().add(text);
// Scene তৈরি এবং সেট করা
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Mouse Event Example");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
setOnMouseClicked()
মেথডটি একটি MouseEvent
তৈরি করে এবং মাউস ক্লিক হওয়ার পরে ইভেন্টের অবস্থান (X এবং Y কোলাম) প্রিন্ট করে।এখানে একটি কীবোর্ড ইনপুট ইভেন্ট হ্যান্ডলিং উদাহরণ দেওয়া হয়েছে:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class KeyEventExample extends Application {
@Override
public void start(Stage primaryStage) {
// StackPane লেআউট তৈরি করা
StackPane root = new StackPane();
// KeyEvent এর জন্য হ্যান্ডলার যোগ করা
root.setOnKeyPressed(event -> {
System.out.println("Key pressed: " + event.getText());
});
// Scene তৈরি এবং সেট করা
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Key Event Example");
primaryStage.setScene(scene);
primaryStage.show();
// Focus করতে হবে যাতে কীবোর্ড ইভেন্ট সক্রিয় হয়
scene.requestFocus();
}
public static void main(String[] args) {
launch(args);
}
}
setOnKeyPressed()
মেথডটি একটি KeyEvent
তৈরি করে এবং কীবোর্ডে যে কী চাপা হবে, তা প্রিন্ট করে।scene.requestFocus()
কল করা হয়েছে যাতে কীবোর্ড ইভেন্ট কাজ করতে পারে।ActionEvent
, MouseEvent
, KeyEvent
, ইত্যাদি।JavaFX এ ইভেন্ট হ্যান্ডলিং একটি গুরুত্বপূর্ণ এবং শক্তিশালী ফিচার যা আপনাকে ইউজার ইন্টারঅ্যাকশন অনুসারে অ্যাপ্লিকেশনের প্রতিক্রিয়া নির্ধারণ করতে সহায়তা করে। আপনি ActionEvent, MouseEvent, এবং KeyEvent এর মতো বিভিন্ন ধরনের ইভেন্ট হ্যান্ডল করতে পারেন এবং তাদের জন্য যথাযথ হ্যান্ডলার সেট করতে পারেন।
JavaFX তে, Event Sources এবং Event Handlers হল দুটি গুরুত্বপূর্ণ বিষয় যা ইভেন্ট ড্রিভেন প্রোগ্রামিংয়ের মূল অংশ। Event Source হল সেই উপাদান (যেমন বাটন, মাউস, কীবোর্ড) যা একটি ইভেন্ট তৈরি করে, এবং Event Handler হল সেই কোড যা ইভেন্টটি হ্যান্ডেল করে, অর্থাৎ ইভেন্টটি ঘটার পর কী করা হবে তা নির্ধারণ করে।
Event Sources হল JavaFX UI উপাদান যা ইভেন্ট সৃষ্টি করে, যেমন:
Event Handlers হল ফাংশন বা মেথড যা একটি নির্দিষ্ট ইভেন্টে কার্যকর হয়। যখন ইভেন্ট উৎস (উপাদান) একটি ইভেন্ট তৈরি করে, তখন সেই ইভেন্ট হ্যান্ডলার নির্দিষ্ট কোড এক্সিকিউট করে। এটি সাধারণত Lambda Expressions বা Anonymous Classes ব্যবহার করে সেট করা হয়।
JavaFX এ ইভেন্ট হ্যান্ডলারের জন্য কিছু কমন উপাদান হল:
setOnAction()
: একটি অ্যাকশন ইভেন্ট হ্যান্ডল করার জন্য।setOnMouseClicked()
: মাউস ক্লিক ইভেন্ট হ্যান্ডল করার জন্য।setOnKeyPressed()
: কীবোর্ড কী প্রেস ইভেন্ট হ্যান্ডল করার জন্য।এই উদাহরণে, একটি Button
তৈরি করা হয়েছে এবং তার ক্লিক ইভেন্ট হ্যান্ডেল করা হয়েছে।
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class EventHandlingExample extends Application {
@Override
public void start(Stage primaryStage) {
// বাটন তৈরি
Button btn = new Button("Click Me");
// বাটনে অ্যাকশন হ্যান্ডলার সেট করা
btn.setOnAction(e -> {
System.out.println("Button was clicked!");
});
// লেআউট তৈরি এবং বাটন যোগ করা
StackPane root = new StackPane();
root.getChildren().add(btn);
// দৃশ্য তৈরি
Scene scene = new Scene(root, 300, 200);
primaryStage.setTitle("Button Click Event Example");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Button btn = new Button("Click Me");
: একটি বাটন তৈরি করা হয়েছে।btn.setOnAction(e -> { ... });
: বাটন ক্লিক করার সময় একটি অ্যাকশন ইভেন্ট হ্যান্ডলার সেট করা হয়েছে, যেখানে System.out.println()
ব্যবহার করে কনসোলে একটি বার্তা প্রিন্ট করা হচ্ছে।এখানে একটি StackPane
উপাদান তৈরি করা হয়েছে এবং তার মাউস ক্লিক ইভেন্ট হ্যান্ডেল করা হয়েছে।
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class MouseEventHandlingExample extends Application {
@Override
public void start(Stage primaryStage) {
// StackPane তৈরি
StackPane root = new StackPane();
// মাউস ক্লিক ইভেন্ট হ্যান্ডলার
root.setOnMouseClicked(event -> {
System.out.println("Mouse clicked at: " + event.getX() + ", " + event.getY());
});
// দৃশ্য তৈরি
Scene scene = new Scene(root, 300, 200);
primaryStage.setTitle("Mouse Click Event Example");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
root.setOnMouseClicked()
: মাউস ক্লিক ইভেন্টের জন্য একটি হ্যান্ডলার সেট করা হয়েছে।event.getX()
এবং event.getY()
ব্যবহার করে মাউসের ক্লিকের স্থান (X এবং Y) কনসোলে প্রদর্শিত হচ্ছে।এখানে একটি TextField
তৈরি করা হয়েছে এবং তার কীবোর্ড কী প্রেস ইভেন্ট হ্যান্ডেল করা হয়েছে।
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class KeyPressEventHandlingExample extends Application {
@Override
public void start(Stage primaryStage) {
// TextField তৈরি
TextField textField = new TextField();
// কী প্রেস ইভেন্ট হ্যান্ডলার
textField.setOnKeyPressed(event -> {
System.out.println("Key pressed: " + event.getText());
});
// লেআউট তৈরি
StackPane root = new StackPane();
root.getChildren().add(textField);
// দৃশ্য তৈরি
Scene scene = new Scene(root, 300, 200);
primaryStage.setTitle("Key Press Event Example");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
textField.setOnKeyPressed()
: কীবোর্ড কী প্রেসের জন্য ইভেন্ট হ্যান্ডলার সেট করা হয়েছে।event.getText()
ব্যবহার করে প্রেস করা কীটি কনসোলে প্রদর্শিত হচ্ছে।setOnAction()
setOnMouseClicked()
, setOnMouseMoved()
setOnKeyPressed()
, setOnKeyReleased()
setOnFocusGained()
, setOnFocusLost()
JavaFX তে ইভেন্ট সিস্টেম খুবই শক্তিশালী এবং নমনীয়। আপনি বিভিন্ন ধরনের UI উপাদানের মাধ্যমে ইভেন্ট তৈরি করতে পারেন এবং ল্যাম্বডা এক্সপ্রেশন বা অ্যাননিমাস ক্লাস ব্যবহার করে ইভেন্ট হ্যান্ডলার সেট করতে পারেন। JavaFX এর ইভেন্ট হ্যান্ডলিং সিস্টেম অ্যাপ্লিকেশনকে আরও ইন্টারেক্টিভ এবং ইউজার ফ্রেন্ডলি করে তোলে।
JavaFX তে Mouse Event এবং Keyboard Event হ্যান্ডলিং খুবই গুরুত্বপূর্ণ এবং প্রয়োজনীয়। আপনি যখন একটি GUI অ্যাপ্লিকেশন তৈরি করেন, তখন আপনার অ্যাপ্লিকেশনে ইউজার ইন্টারঅ্যাকশনের জন্য মাউস এবং কিবোর্ড ইভেন্ট সঠিকভাবে হ্যান্ডল করা জরুরি।
নিচে Mouse Event এবং Keyboard Event হ্যান্ডলিং এর উদাহরণ দেওয়া হলো।
JavaFX তে মাউস ইভেন্টের জন্য সাধারণত নিম্নলিখিত ইভেন্টগুলি ব্যবহৃত হয়:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class MouseEventExample extends Application {
@Override
public void start(Stage primaryStage) {
// একটি রেকট্যাঙ্গল তৈরি করা
Rectangle rectangle = new Rectangle(200, 150);
rectangle.setStyle("-fx-fill: lightblue;");
// Mouse Enter ইভেন্ট হ্যান্ডলিং
rectangle.setOnMouseEntered(event -> {
rectangle.setStyle("-fx-fill: lightgreen;");
System.out.println("Mouse entered the rectangle");
});
// Mouse Exit ইভেন্ট হ্যান্ডলিং
rectangle.setOnMouseExited(event -> {
rectangle.setStyle("-fx-fill: lightblue;");
System.out.println("Mouse exited the rectangle");
});
// Mouse Click ইভেন্ট হ্যান্ডলিং
rectangle.setOnMouseClicked(event -> {
System.out.println("Rectangle clicked at: " + event.getX() + ", " + event.getY());
});
// Mouse Drag ইভেন্ট হ্যান্ডলিং
rectangle.setOnMouseDragged(event -> {
rectangle.setX(event.getSceneX() - 100); // Move the rectangle
rectangle.setY(event.getSceneY() - 75); // Move the rectangle
});
// StackPane layout তৈরি
StackPane root = new StackPane();
root.getChildren().add(rectangle);
// Scene তৈরি এবং সেট করা
Scene scene = new Scene(root, 400, 300);
primaryStage.setTitle("Mouse Event Example");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
JavaFX তে কিবোর্ড ইভেন্টের জন্য সাধারণত নিম্নলিখিত ইভেন্টগুলি ব্যবহৃত হয়:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class KeyboardEventExample extends Application {
@Override
public void start(Stage primaryStage) {
// একটি Text এলিমেন্ট তৈরি করা
Text text = new Text("Press any key");
// Key Pressed ইভেন্ট হ্যান্ডলিং
text.setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.ENTER) {
System.out.println("Enter key pressed");
} else {
System.out.println("Key Pressed: " + event.getText());
}
});
// Key Released ইভেন্ট হ্যান্ডলিং
text.setOnKeyReleased(event -> {
System.out.println("Key Released: " + event.getCode());
});
// StackPane layout তৈরি
StackPane root = new StackPane();
root.getChildren().add(text);
// Scene তৈরি এবং সেট করা
Scene scene = new Scene(root, 400, 300);
// Scene এর KeyEvent সক্রিয় করা
scene.setOnKeyPressed(event -> {
text.setText("You pressed: " + event.getText());
});
primaryStage.setTitle("Keyboard Event Example");
primaryStage.setScene(scene);
primaryStage.show();
// Focus text object so it can receive key events
text.requestFocus();
}
public static void main(String[] args) {
launch(args);
}
}
ENTER
কীবোর্ডে প্রেস করা হয় তখন একটি বার্তা প্রিন্ট হবে।text.requestFocus()
ব্যবহার করা হয়েছে যাতে টেক্সট এলিমেন্টে ফোকাস থাকে এবং কিবোর্ড ইভেন্ট গ্রহণ করতে পারে।এখন, ধরুন আপনি একটি UI কম্পোনেন্টে (যেমন, একটি বাটন বা টেক্সট ফিল্ড) মাউস এবং কিবোর্ড ইভেন্ট একসাথে হ্যান্ডল করতে চান। এই ক্ষেত্রে, আপনি উল্লিখিত মাউস এবং কিবোর্ড ইভেন্ট একসাথে ব্যবহার করতে পারেন। উদাহরণস্বরূপ:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class MouseAndKeyboardEventsExample extends Application {
@Override
public void start(Stage primaryStage) {
// একটি বাটন তৈরি করা
Button button = new Button("Click or Press Enter");
// Mouse Click Event
button.setOnMouseClicked(event -> {
System.out.println("Button clicked!");
});
// Key Pressed Event (Enter key)
button.setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.ENTER) {
System.out.println("Enter key pressed while button is focused!");
}
});
// StackPane layout তৈরি করা
StackPane root = new StackPane();
root.getChildren().add(button);
// Scene তৈরি এবং সেট করা
Scene scene = new Scene(root, 400, 300);
primaryStage.setTitle("Mouse and Keyboard Events Example");
primaryStage.setScene(scene);
primaryStage.show();
// বাটনে ফোকাস রাখা
button.requestFocus();
}
public static void main(String[] args) {
launch(args);
}
}
MouseClicked
, MouseEntered
, MouseExited
, MouseDragged
ইত্যাদি ব্যবহার করা হয় ইউজার ইন্টারঅ্যাকশনের জন্য।KeyPressed
, KeyReleased
, KeyTyped
ব্যবহার করে ইউজারের কিবোর্ড ইনপুট নিয়ে অ্যাপ্লিকেশনে কাজ করা যায়।JavaFX তে মাউস এবং কিবোর্ড ইভেন্ট ব্যবহারের মাধ্যমে আপনি আরো ইন্টারঅ্যাকটিভ এবং ব্যবহারকারী-বান্ধব অ্যাপ্লিকেশন তৈরি করতে পারেন।
Event Bubbling এবং Event Capturing হল JavaFX (এবং সাধারণভাবে DOM-based UI frameworks) এর ইভেন্ট মডেল এর দুটি গুরুত্বপূর্ণ অংশ, যা UI ইভেন্টের কার্যকলাপকে পরিচালনা করে। এটি নির্দেশ করে কিভাবে ইভেন্টগুলি একে অপরের মধ্যে propagate (পাস) হয়, অর্থাৎ কিভাবে ইভেন্টটি একটি UI উপাদান থেকে অন্য উপাদানে পৌঁছায়।
Event Bubbling হল ইভেন্ট হ্যান্ডলিংয়ের একটি প্রক্রিয়া যেখানে একটি ইভেন্ট প্রথমে target element (যেমন, একটি বাটন) এ ঘটে, এবং তারপর এটি উর্ধ্বমুখী (upward) প্রপাগেট হয়, অর্থাৎ প্যারেন্ট উপাদান এবং তার উপরের স্তরের উপাদানগুলির দিকে চলে যায়। এটি প্রথমে child (সন্তান) উপাদানে ঘটে এবং পরে এটি parent (প্যারেন্ট) উপাদানগুলিতে পৌঁছায়, এর পরে তারা যদি ইভেন্ট হ্যান্ডলার সেট করা থাকে।
Event Bubbling-এর সুবিধা হল, আপনি parent উপাদানে একটি সাধারণ ইভেন্ট হ্যান্ডলার সেট করতে পারেন এবং তারপরে সমস্ত child উপাদানের ইভেন্টগুলির জন্য কাজ করতে পারবেন।
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class EventBubblingExample extends Application {
@Override
public void start(Stage primaryStage) {
// Parent Layout
StackPane root = new StackPane();
// Button as child element
Button btn = new Button("Click Me");
// Event handler for the parent (root) layout
root.setOnMouseClicked(e -> System.out.println("Parent clicked"));
// Event handler for the button (child)
btn.setOnMouseClicked(e -> System.out.println("Button clicked"));
// Adding the button to the parent layout
root.getChildren().add(btn);
// Creating the scene
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Event Bubbling Example");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
এটি দেখায় যে, একটি ইভেন্ট প্রথমে child উপাদানে ঘটে, তারপর তা parent উপাদানে চলে যায়।
Event Capturing হল ইভেন্ট হ্যান্ডলিংয়ের একটি প্রক্রিয়া যেখানে ইভেন্টটি প্রথমে parent (প্যারেন্ট) উপাদানে ধরা হয় এবং তারপরে child (সন্তান) উপাদানগুলিতে পৌঁছায়। এটি বিপরীত প্রক্রিয়া যা event bubbling এর সাথে সম্পর্কিত। ইভেন্ট প্রথমে প্যারেন্ট উপাদানে পৌঁছায় এবং তারপর child উপাদানগুলিতে পৌঁছায়।
Event Capturing-এর সুবিধা হল, আপনি parent উপাদানে ইভেন্ট হ্যান্ডলার যোগ করতে পারেন, যাতে সমস্ত child উপাদানের ইভেন্টটি শুরুতেই ক্যাপচার করা হয়।
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class EventCapturingExample extends Application {
@Override
public void start(Stage primaryStage) {
// Parent Layout
StackPane root = new StackPane();
// Button as child element
Button btn = new Button("Click Me");
// Event handler for the parent (root) layout, set for capturing phase
root.addEventFilter(javafx.event.EventType.ROOT, e -> System.out.println("Parent clicked (Capturing Phase)"));
// Event handler for the button (child)
btn.setOnMouseClicked(e -> System.out.println("Button clicked"));
// Adding the button to the parent layout
root.getChildren().add(btn);
// Creating the scene
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Event Capturing Example");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
এটি দেখায় যে, প্রথমে parent উপাদান ইভেন্টটি ক্যাপচার করবে এবং পরে এটি child উপাদানে পৌঁছাবে।
addEventFilter()
মেথড ব্যবহার করতে হয়।addEventHandler():
btn.addEventHandler(MouseEvent.MOUSE_CLICKED, e -> System.out.println("Button clicked"));
addEventFilter():
root.addEventFilter(MouseEvent.MOUSE_CLICKED, e -> System.out.println("Parent clicked (Capturing Phase)"));
addEventHandler()
এবং addEventFilter()
ব্যবহার করা হয়, যেখানে প্রথমটি event bubbling এবং দ্বিতীয়টি event capturing এর জন্য ব্যবহৃত হয়।Read more