JavaFX Event Handling

Java Technologies - জাভাএফএক্স (JavaFx)
106
106

JavaFX এ ইভেন্ট হ্যান্ডলিং হল একটি গুরুত্বপূর্ণ অংশ, যা ইউজার ইন্টারঅ্যাকশন (যেমন বোতাম ক্লিক, কী প্রেস, মাউস মুভ) থেকে সিস্টেমের রেসপন্স তৈরি করে। JavaFX এ ইভেন্ট হ্যান্ডলিং ব্যবহার করে আপনি বিভিন্ন ধরণের ইউজার ইনপুটের জন্য হ্যান্ডলার সেট করতে পারেন এবং সেগুলির প্রতিক্রিয়া তৈরি করতে পারেন।

JavaFX Event Handling এর প্রক্রিয়া:

JavaFX এ ইভেন্ট হ্যান্ডলিং চারটি প্রধান অংশে বিভক্ত:

  1. Event Source: ইভেন্টের উৎস (যেমন একটি বাটন বা টেক্সট ফিল্ড)
  2. Event Type: ইভেন্টের ধরন (যেমন একটি ক্লিক, কী প্রেস, মাউস মুভ)
  3. Event Handler: একটি ক্লাস যা ইভেন্টের জন্য প্রতিক্রিয়া তৈরি করে
  4. Event Dispatching: ইভেন্টের উৎস থেকে হ্যান্ডলারের কাছে ইভেন্ট পাঠানো

JavaFX এর ইভেন্ট হ্যান্ডলিং EventHandler ইন্টারফেসের মাধ্যমে সম্পাদিত হয়। এটি বিভিন্ন ধরনের ইভেন্ট যেমন ActionEvent, MouseEvent, KeyEvent ইত্যাদি হ্যান্ডল করতে পারে।

JavaFX Event Handling Example:

এখানে একটি সাধারণ JavaFX অ্যাপ্লিকেশন উদাহরণ দেয়া হলো যেখানে ইভেন্ট হ্যান্ডলিং ব্যবহার করা হয়েছে। এই প্রোগ্রামে একটি বাটন ক্লিক করার পর একটি লেবেলে বার্তা প্রদর্শিত হবে।

JavaFX Event Handling - Button Click Example:

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);  // অ্যাপ্লিকেশন চালু করা
    }
}

Code Explanation:

  1. Button এবং Label তৈরি:
    • Button তৈরি করা হয়েছে যা ক্লিক করার জন্য একটি ইউজার ইন্টারফেস উপাদান হিসেবে ব্যবহৃত হবে।
    • Label তৈরি করা হয়েছে যা বাটন ক্লিক করার পর একটি বার্তা প্রদর্শন করবে।
  2. setOnAction Method:
    • এই মেথডটি Button এ একটি ActionEvent হ্যান্ডল করতে ব্যবহৃত হয়।
    • যখন ইউজার বাটনটিতে ক্লিক করবে, তখন এই হ্যান্ডলারটি কার্যকর হবে এবং label.setText("Button was clicked!") মেথডের মাধ্যমে লেবেলে একটি বার্তা দেখানো হবে।
  3. EventHandler<ActionEvent> Interface:
    • এখানে EventHandler<ActionEvent> ব্যবহার করা হয়েছে যা ActionEvent ধরনটি হ্যান্ডল করতে সক্ষম। handle() মেথডটি তখন কল হয় যখন ইভেন্ট ঘটবে।
  4. StackPane Layout:
    • StackPane ব্যবহার করা হয়েছে যেটি একটি সাধারণ লেআউট ম্যানেজার যা উপাদানগুলিকে একে অপরের উপরে স্তূপীকৃত করে।
  5. Scene এবং Stage:
    • Scene তৈরি করা হয়েছে এবং সেটি Stage-এ সেট করা হয়েছে, যা উইন্ডোটি দেখানোর জন্য ব্যবহৃত হয়।

Event Handling Types in JavaFX:

JavaFX বিভিন্ন ধরনের ইভেন্ট হ্যান্ডলিং সমর্থন করে। এখানে কিছু সাধারণ ইভেন্ট হ্যান্ডলিং এর ধরন দেয়া হল:

  1. ActionEvent:

    • ActionEvent ইভেন্ট সাধারণত তখন ট্রিগার হয় যখন একটি ইউজার ইন্টারঅ্যাকশন ঘটে, যেমন বাটন ক্লিক, মেনু নির্বাচন ইত্যাদি।

    উদাহরণ:

    btn.setOnAction(event -> {
        System.out.println("Button clicked!");
    });
    
  2. MouseEvent:

    • মাউস সম্পর্কিত ইভেন্ট যেমন মাউস ক্লিক, মাউস মুভ, মাউস এনটার বা মাউস এক্সিট।

    উদাহরণ:

    btn.setOnMouseClicked(event -> {
        System.out.println("Mouse clicked on button");
    });
    
  3. KeyEvent:

    • কীবোর্ডের মাধ্যমে কী প্রেস ইভেন্ট হ্যান্ডলিং। ইউজার যখন কী প্রেস করে, তখন এই ইভেন্ট ট্রিগার হয়।

    উদাহরণ:

    scene.setOnKeyPressed(event -> {
        System.out.println("Key pressed: " + event.getText());
    });
    
  4. DragEvent:

    • এটি ড্র্যাগ এবং ড্রপ ইভেন্ট হ্যান্ডলিং এর জন্য ব্যবহৃত হয়।

    উদাহরণ:

    btn.setOnDragDetected(event -> {
        System.out.println("Drag detected");
    });
    
  5. ResizeEvent:

    • যখন সাইজ পরিবর্তন হয়, তখন এই ইভেন্ট ট্রিগার হয়।

    উদাহরণ:

    scene.setOnResize(event -> {
        System.out.println("Scene resized");
    });
    

Event Handling Using Lambda Expressions:

Java 8 এর Lambda Expressions ব্যবহার করে JavaFX এর ইভেন্ট হ্যান্ডলিং আরও সহজ এবং সুন্দর করা যায়।

btn.setOnAction(event -> label.setText("Button clicked using Lambda!"));

Event Handling in JavaFX Advantages:

  1. আনুষ্ঠানিক ও সোজা ইভেন্ট হ্যান্ডলিং: JavaFX তে ইভেন্ট হ্যান্ডলিং সোজা এবং সুন্দর। এখানে ইভেন্ট হ্যান্ডলিং ক্লাসগুলো সহজে তৈরি করা যায়।
  2. Lambda Expressions এর ব্যবহার: Java 8 এ Lambda Expressions এবং Method References ইভেন্ট হ্যান্ডলিং কে আরও কমপ্যাক্ট এবং পড়তে সহজ করে দিয়েছে।
  3. Multi-Event Handling: JavaFX বিভিন্ন ইভেন্ট টাইপ সমর্থন করে, যেমন মাউস, কীবোর্ড, ড্র্যাগ ইভেন্ট এবং আরও অনেক কিছু।
  4. UI Components Interaction: JavaFX এর ইভেন্ট হ্যান্ডলিং আপনাকে সহজে UI কম্পোনেন্টের সাথে ইন্টারঅ্যাক্ট করতে দেয়, যা ইউজার ইন্টারফেস ডিজাইনে সুবিধাজনক।

JavaFX এর ইভেন্ট হ্যান্ডলিং ব্যবহার করে আপনি সহজেই ইউজার ইন্টারঅ্যাকশনের জন্য প্রতিক্রিয়া তৈরি করতে পারেন। এটি ব্যবহারকারীর অ্যাপ্লিকেশন ব্যবহারের অভিজ্ঞতাকে উন্নত করে এবং বিভিন্ন ধরণের ইভেন্টের মাধ্যমে ইউজার ইন্টারফেসকে প্রোঅ্যাকটিভ ও ইন্টারঅ্যাকটিভ করে তোলে।

Content added By

JavaFX এ Event Handling এর ধারণা

92
92

JavaFX এ Event Handling হল JavaFX অ্যাপ্লিকেশনগুলিতে ইউজারের ইন্টারঅ্যাকশন (যেমন ক্লিক, কিবোর্ড ইনপুট, মাউস মুভমেন্ট ইত্যাদি) পরিচালনা করার প্রক্রিয়া। JavaFX এ Event Handling ব্যবস্থাপনা একটি শক্তিশালী সিস্টেমের মাধ্যমে করা হয়, যেখানে আপনি ইভেন্ট লিসেনার এবং হ্যান্ডলার ব্যবহার করে বিভিন্ন ধরনের ইভেন্ট (যেমন ক্লিক, হোভার, কীবোর্ড এন্ট্রি) ট্রিগার করতে পারেন এবং সেগুলির প্রতিক্রিয়া নির্ধারণ করতে পারেন।

JavaFX এ Event Handling এর ধারণা

  1. Event Source:
    • JavaFX অ্যাপ্লিকেশনে ইভেন্ট সোর্স হল সেই উপাদান যা ইভেন্ট জেনারেট করে। যেমন একটি Button বা TextField যা ইউজারের ইন্টারঅ্যাকশন থেকে ইভেন্ট তৈরি করে।
  2. Event Handler:
    • ইভেন্ট হ্যান্ডলার হল সেই কোড যা ইভেন্টের প্রতিক্রিয়া জানায়। এটি সাধারণত একটি মেথড যা নির্দিষ্ট ইভেন্টের জন্য ট্রিগার করা হয়।
  3. Event Listener:
    • Event Listener একটি অবজেক্ট যা নির্দিষ্ট ধরনের ইভেন্টের জন্য সাইন আপ করে। এটি একটি কার্যকর ইভেন্ট হ্যান্ডলার এবং যখন নির্দিষ্ট ইভেন্ট ঘটে, তখন এটি সেই ইভেন্ট হ্যান্ডলিং কোডটি চালায়।

JavaFX এ Event Handling এর বিভিন্ন ধাপ:

  1. ইভেন্ট ডিক্লেয়ারেশন: কোন ইভেন্টটি ট্রিগার করা হবে তা নির্ধারণ করা হয়।
  2. ইভেন্ট হ্যান্ডলার সেট করা: কোন কোডটি ইভেন্ট হওয়ার পর চালানো হবে তা নির্ধারণ করা হয়।
  3. ইভেন্ট রেজিস্ট্রেশন: ইভেন্ট সোর্সের সাথে ইভেন্ট হ্যান্ডলার যুক্ত করা হয়।

JavaFX এ ইভেন্ট হ্যান্ডলিং এর প্রধান উপাদান:

  1. Event Types:
    • JavaFX এর বিভিন্ন ধরনের ইভেন্ট রয়েছে যেমন:
      • ActionEvent (যেমন বাটন ক্লিক)
      • MouseEvent (যেমন মাউস ক্লিক, মাউস মুভ)
      • KeyEvent (যেমন কীবোর্ড ইনপুট)
      • DragEvent (যেমন ড্র্যাগ এবং ড্রপ)
  2. Event Filters vs Event Handlers:
    • Event Filters: ইভেন্টের প্রতিক্রিয়া ইভেন্ট ক্যাপচারিং স্টেপ এ ঘটে, যখন ইভেন্ট একটি উপাদান থেকে অন্য উপাদানে পৌঁছানোর আগে।
    • Event Handlers: ইভেন্টের প্রতিক্রিয়া বাবলিং স্টেপ এ ঘটে, যখন ইভেন্ট উপাদান থেকে উপাদানে পৌঁছানোর পর।

JavaFX Event Handling Example:

১. Button Click Event Handling:

এটি একটি সাধারণ বাটন ক্লিক ইভেন্ট হ্যান্ডলিং উদাহরণ:

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!" মেসেজটি কনসোলে প্রিন্ট করবে।

২. Mouse Event Handling:

এখানে একটি মাউস ক্লিক ইভেন্ট হ্যান্ডলিং উদাহরণ দেওয়া হয়েছে:

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 কোলাম) প্রিন্ট করে।

৩. Key Event Handling:

এখানে একটি কীবোর্ড ইনপুট ইভেন্ট হ্যান্ডলিং উদাহরণ দেওয়া হয়েছে:

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() কল করা হয়েছে যাতে কীবোর্ড ইভেন্ট কাজ করতে পারে।

JavaFX Event Handling এর মূল উপাদান:

  1. Event Type: বিভিন্ন ধরনের ইভেন্ট যেমন ActionEvent, MouseEvent, KeyEvent, ইত্যাদি।
  2. Event Handler: ইভেন্টের প্রতিক্রিয়া দেখানোর জন্য কোড।
  3. Event Source: ইভেন্ট জেনারেট করে এমন UI উপাদান।
  4. Event Listener: ইভেন্টের জন্য সাইন আপ করা অবজেক্ট।

Event Handling Process:

  1. Event Generation: ইউজারের ইন্টারঅ্যাকশন (যেমন ক্লিক, কীবোর্ড ইনপুট) দ্বারা ইভেন্ট তৈরি হয়।
  2. Event Propagation: ইভেন্টটি উপাদানগুলির মধ্যে পাস হয় এবং event bubbling বা event capturing হতে পারে।
  3. Event Handling: ইভেন্টটি প্রাপ্ত হলে নির্দিষ্ট হ্যান্ডলার মেথড কল হয় এবং আউটপুট তৈরি হয়।

সারাংশ:

JavaFX এ ইভেন্ট হ্যান্ডলিং একটি গুরুত্বপূর্ণ এবং শক্তিশালী ফিচার যা আপনাকে ইউজার ইন্টারঅ্যাকশন অনুসারে অ্যাপ্লিকেশনের প্রতিক্রিয়া নির্ধারণ করতে সহায়তা করে। আপনি ActionEvent, MouseEvent, এবং KeyEvent এর মতো বিভিন্ন ধরনের ইভেন্ট হ্যান্ডল করতে পারেন এবং তাদের জন্য যথাযথ হ্যান্ডলার সেট করতে পারেন।

Content added By

Event Sources এবং Event Handlers

78
78

JavaFX তে, Event Sources এবং Event Handlers হল দুটি গুরুত্বপূর্ণ বিষয় যা ইভেন্ট ড্রিভেন প্রোগ্রামিংয়ের মূল অংশ। Event Source হল সেই উপাদান (যেমন বাটন, মাউস, কীবোর্ড) যা একটি ইভেন্ট তৈরি করে, এবং Event Handler হল সেই কোড যা ইভেন্টটি হ্যান্ডেল করে, অর্থাৎ ইভেন্টটি ঘটার পর কী করা হবে তা নির্ধারণ করে।

1. Event Sources

Event Sources হল JavaFX UI উপাদান যা ইভেন্ট সৃষ্টি করে, যেমন:

  • বাটন (Button)
  • মাউস ক্লিক (Mouse Click)
  • কীবোর্ডের কী প্রেস (Key Press)
  • অন্যান্য বিভিন্ন UI উপাদান

2. Event Handlers

Event Handlers হল ফাংশন বা মেথড যা একটি নির্দিষ্ট ইভেন্টে কার্যকর হয়। যখন ইভেন্ট উৎস (উপাদান) একটি ইভেন্ট তৈরি করে, তখন সেই ইভেন্ট হ্যান্ডলার নির্দিষ্ট কোড এক্সিকিউট করে। এটি সাধারণত Lambda Expressions বা Anonymous Classes ব্যবহার করে সেট করা হয়।

JavaFX এ ইভেন্ট হ্যান্ডলারের জন্য কিছু কমন উপাদান হল:

  • setOnAction(): একটি অ্যাকশন ইভেন্ট হ্যান্ডল করার জন্য।
  • setOnMouseClicked(): মাউস ক্লিক ইভেন্ট হ্যান্ডল করার জন্য।
  • setOnKeyPressed(): কীবোর্ড কী প্রেস ইভেন্ট হ্যান্ডল করার জন্য।

উদাহরণ: Event Sources এবং Event Handlers

উদাহরণ ১: Button Click Event Handling

এই উদাহরণে, একটি 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() ব্যবহার করে কনসোলে একটি বার্তা প্রিন্ট করা হচ্ছে।

উদাহরণ ২: Mouse Click Event Handling

এখানে একটি 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) কনসোলে প্রদর্শিত হচ্ছে।

উদাহরণ ৩: Key Press Event Handling

এখানে একটি 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() ব্যবহার করে প্রেস করা কীটি কনসোলে প্রদর্শিত হচ্ছে।

JavaFX Event Handling Types

  1. Action Events:
    • সাধারণত বাটন ক্লিক, মেনু আইটেম সিলেক্ট করার সময় ঘটে।
    • উদাহরণ: setOnAction()
  2. Mouse Events:
    • মাউস ক্লিক, মাউস মুভ, মাউস এন্টারে ইভেন্ট ঘটে।
    • উদাহরণ: setOnMouseClicked(), setOnMouseMoved()
  3. Key Events:
    • কীবোর্ড কী প্রেস এবং কী রিলিজ ইভেন্ট ঘটে।
    • উদাহরণ: setOnKeyPressed(), setOnKeyReleased()
  4. Focus Events:
    • UI উপাদান (যেমন, টেক্সটফিল্ড) ফোকাস পেলে বা ফোকাস হারালে ইভেন্ট ঘটে।
    • উদাহরণ: setOnFocusGained(), setOnFocusLost()

JavaFX তে ইভেন্ট সিস্টেম খুবই শক্তিশালী এবং নমনীয়। আপনি বিভিন্ন ধরনের UI উপাদানের মাধ্যমে ইভেন্ট তৈরি করতে পারেন এবং ল্যাম্বডা এক্সপ্রেশন বা অ্যাননিমাস ক্লাস ব্যবহার করে ইভেন্ট হ্যান্ডলার সেট করতে পারেন। JavaFX এর ইভেন্ট হ্যান্ডলিং সিস্টেম অ্যাপ্লিকেশনকে আরও ইন্টারেক্টিভ এবং ইউজার ফ্রেন্ডলি করে তোলে।

Content added By

Mouse Event এবং Keyboard Event Management

111
111

JavaFX তে Mouse Event এবং Keyboard Event হ্যান্ডলিং খুবই গুরুত্বপূর্ণ এবং প্রয়োজনীয়। আপনি যখন একটি GUI অ্যাপ্লিকেশন তৈরি করেন, তখন আপনার অ্যাপ্লিকেশনে ইউজার ইন্টারঅ্যাকশনের জন্য মাউস এবং কিবোর্ড ইভেন্ট সঠিকভাবে হ্যান্ডল করা জরুরি।

নিচে Mouse Event এবং Keyboard Event হ্যান্ডলিং এর উদাহরণ দেওয়া হলো।


Mouse Event Handling in JavaFX

JavaFX তে মাউস ইভেন্টের জন্য সাধারণত নিম্নলিখিত ইভেন্টগুলি ব্যবহৃত হয়:

  • Mouse Click: যখন ইউজার মাউস বাটনে ক্লিক করে।
  • Mouse Enter: যখন মাউস একটি নির্দিষ্ট উপাদান/অবজেক্টে প্রবেশ করে।
  • Mouse Exit: যখন মাউস একটি নির্দিষ্ট উপাদান/অবজেক্ট থেকে বের হয়ে যায়।
  • Mouse Drag: যখন মাউস বাটন চাপা অবস্থায় মাউস মুভ করা হয়।
  • Mouse Release: যখন মাউস বাটন ছেড়ে দেওয়া হয়।

উদাহরণ:

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);
    }
}

ব্যাখ্যা:

  • Mouse Entered এবং Mouse Exited ইভেন্টের মাধ্যমে, আমরা রেকট্যাঙ্গলের রঙ পরিবর্তন করেছি।
  • Mouse Clicked ইভেন্টে, ক্লিক করার স্থান প্রিন্ট করা হয়েছে।
  • Mouse Dragged ইভেন্টে, রেকট্যাঙ্গলটি মাউস ড্র্যাগ করার মাধ্যমে স্থানান্তরিত হয়েছে।

Keyboard Event Handling in JavaFX

JavaFX তে কিবোর্ড ইভেন্টের জন্য সাধারণত নিম্নলিখিত ইভেন্টগুলি ব্যবহৃত হয়:

  • Key Pressed: যখন ইউজার কিবোর্ডে কোনো কী প্রেস করে।
  • Key Released: যখন ইউজার কিবোর্ডের কোনো কী ছাড়ে।
  • Key Typed: যখন ইউজার কিবোর্ডে কোনো কী টাইপ করে (অক্ষর ইনপুট)।

উদাহরণ:

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);
    }
}

ব্যাখ্যা:

  • Key Pressed ইভেন্টে, যখন ENTER কীবোর্ডে প্রেস করা হয় তখন একটি বার্তা প্রিন্ট হবে।
  • Key Released ইভেন্টে, যখন কোনো কী ছাড়বে তখন তার কোড প্রিন্ট হবে।
  • Key Typed ইভেন্টে, যে কীটি টাইপ করা হয় সেটি প্রদর্শিত হবে।
  • text.requestFocus() ব্যবহার করা হয়েছে যাতে টেক্সট এলিমেন্টে ফোকাস থাকে এবং কিবোর্ড ইভেন্ট গ্রহণ করতে পারে।

Mouse এবং Keyboard Event একসাথে ব্যবহার করা

এখন, ধরুন আপনি একটি 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);
    }
}

ব্যাখ্যা:

  • Mouse Click: বাটনে ক্লিক করা হলে "Button clicked!" মেসেজ প্রিন্ট হবে।
  • Key Pressed (Enter): যদি Enter কীগুলি চাপা হয় এবং বাটনটি ফোকাসে থাকে, তবে "Enter key pressed while button is focused!" মেসেজ প্রিন্ট হবে।

সারাংশ

  • Mouse Event: JavaFX তে মাউস ইভেন্ট যেমন MouseClicked, MouseEntered, MouseExited, MouseDragged ইত্যাদি ব্যবহার করা হয় ইউজার ইন্টারঅ্যাকশনের জন্য।
  • Keyboard Event: কিবোর্ড ইভেন্ট যেমন KeyPressed, KeyReleased, KeyTyped ব্যবহার করে ইউজারের কিবোর্ড ইনপুট নিয়ে অ্যাপ্লিকেশনে কাজ করা যায়।

JavaFX তে মাউস এবং কিবোর্ড ইভেন্ট ব্যবহারের মাধ্যমে আপনি আরো ইন্টারঅ্যাকটিভ এবং ব্যবহারকারী-বান্ধব অ্যাপ্লিকেশন তৈরি করতে পারেন।

Content added By

Event Bubbling এবং Event Capturing

87
87

Event Bubbling এবং Event Capturing হল JavaFX (এবং সাধারণভাবে DOM-based UI frameworks) এর ইভেন্ট মডেল এর দুটি গুরুত্বপূর্ণ অংশ, যা UI ইভেন্টের কার্যকলাপকে পরিচালনা করে। এটি নির্দেশ করে কিভাবে ইভেন্টগুলি একে অপরের মধ্যে propagate (পাস) হয়, অর্থাৎ কিভাবে ইভেন্টটি একটি UI উপাদান থেকে অন্য উপাদানে পৌঁছায়।

Event Bubbling (ইভেন্ট বাবলিং)

Event Bubbling হল ইভেন্ট হ্যান্ডলিংয়ের একটি প্রক্রিয়া যেখানে একটি ইভেন্ট প্রথমে target element (যেমন, একটি বাটন) এ ঘটে, এবং তারপর এটি উর্ধ্বমুখী (upward) প্রপাগেট হয়, অর্থাৎ প্যারেন্ট উপাদান এবং তার উপরের স্তরের উপাদানগুলির দিকে চলে যায়। এটি প্রথমে child (সন্তান) উপাদানে ঘটে এবং পরে এটি parent (প্যারেন্ট) উপাদানগুলিতে পৌঁছায়, এর পরে তারা যদি ইভেন্ট হ্যান্ডলার সেট করা থাকে।

Event Bubbling-এর সুবিধা হল, আপনি parent উপাদানে একটি সাধারণ ইভেন্ট হ্যান্ডলার সেট করতে পারেন এবং তারপরে সমস্ত child উপাদানের ইভেন্টগুলির জন্য কাজ করতে পারবেন।

Event Bubbling এর উদাহরণ

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);
    }
}

আউটপুট:

  • প্রথমে আপনি বাটনটি ক্লিক করলে "Button clicked" দেখাবে।
  • তারপর, event bubbling এর মাধ্যমে এটি প্যারেন্ট (StackPane) পর্যন্ত যাবে, এবং "Parent clicked" দেখাবে।

এটি দেখায় যে, একটি ইভেন্ট প্রথমে child উপাদানে ঘটে, তারপর তা parent উপাদানে চলে যায়।

Event Capturing (ইভেন্ট ক্যাপচারিং)

Event Capturing হল ইভেন্ট হ্যান্ডলিংয়ের একটি প্রক্রিয়া যেখানে ইভেন্টটি প্রথমে parent (প্যারেন্ট) উপাদানে ধরা হয় এবং তারপরে child (সন্তান) উপাদানগুলিতে পৌঁছায়। এটি বিপরীত প্রক্রিয়া যা event bubbling এর সাথে সম্পর্কিত। ইভেন্ট প্রথমে প্যারেন্ট উপাদানে পৌঁছায় এবং তারপর child উপাদানগুলিতে পৌঁছায়।

Event Capturing-এর সুবিধা হল, আপনি parent উপাদানে ইভেন্ট হ্যান্ডলার যোগ করতে পারেন, যাতে সমস্ত child উপাদানের ইভেন্টটি শুরুতেই ক্যাপচার করা হয়।

Event Capturing এর উদাহরণ

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 clicked (Capturing Phase)" দেখাবে, কারণ প্যারেন্ট উপাদান ইভেন্টটি প্রথমে ক্যাপচার করেছে।
  • তারপর, বাটনটি ক্লিক হলে "Button clicked" দেখাবে।

এটি দেখায় যে, প্রথমে parent উপাদান ইভেন্টটি ক্যাপচার করবে এবং পরে এটি child উপাদানে পৌঁছাবে।

Event Bubbling vs Event Capturing:

  1. Event Bubbling:
    • ইভেন্টটি প্রথমে target (child) উপাদানে ঘটে এবং পরে তা parent উপাদানে চলে যায়।
    • JavaFX ডিফল্টভাবে event bubbling ব্যবহার করে।
  2. Event Capturing:
    • ইভেন্টটি প্রথমে parent উপাদানে পৌঁছায় এবং পরে child উপাদানে চলে যায়।
    • ইভেন্ট ক্যাপচারিং ব্যবহার করার জন্য আপনাকে addEventFilter() মেথড ব্যবহার করতে হয়।

Event Propagation Flow:

  • Event Capturing:
    • Parent → Child (Top-down)
    • প্রথমে ইভেন্ট প্যারেন্টে ধরা হয়, তারপর চাইল্ডে চলে আসে।
  • Event Bubbling:
    • Child → Parent (Bottom-up)
    • প্রথমে ইভেন্ট চাইল্ডে ঘটে, তারপর প্যারেন্টে চলে আসে।

JavaFX-এ Event Handling:

  1. addEventHandler():

    • এটি ব্যবহার করে আপনি একটি ইভেন্ট হ্যান্ডলার যুক্ত করতে পারেন যেটি event bubbling ফেজে কাজ করবে।
    btn.addEventHandler(MouseEvent.MOUSE_CLICKED, e -> System.out.println("Button clicked"));
    
  2. addEventFilter():

    • এটি ব্যবহার করে আপনি একটি ইভেন্ট ফিল্টার যুক্ত করতে পারেন যা event capturing ফেজে কাজ করবে।
    root.addEventFilter(MouseEvent.MOUSE_CLICKED, e -> System.out.println("Parent clicked (Capturing Phase)"));
    

সারাংশ:

  • Event Bubbling ইভেন্টটি প্রথমে child উপাদানে ঘটিয়ে, তারপর তা parent উপাদানে চলে আসে।
  • Event Capturing ইভেন্টটি প্রথমে parent উপাদানে ধরা হয় এবং পরে তা child উপাদানে চলে আসে।
  • JavaFX-এ ইভেন্ট হ্যান্ডলিং করতে addEventHandler() এবং addEventFilter() ব্যবহার করা হয়, যেখানে প্রথমটি event bubbling এবং দ্বিতীয়টি event capturing এর জন্য ব্যবহৃত হয়।
Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion