ChoiceBox দিয়ে একের অধিক আইটেম থেকে যে কোন একটা আইটেম সিলেক্ট করা যায়। এই উদাহরণে IDE হিসেবে IntelliJ IDEA ব্যবহার করা হয়েছে। IntelliJ তে একটা JavaFX প্রজেক্ট তৈরি করে নিব। এরপর সীন বিল্ডার এ একটা ChoiceBox যুক্ত করব, এরপর একটা আইডি দিব। বা নিচের কোড গুলো ব্যবহার করলেও হবেঃ
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.collections.FXCollections?> <?import javafx.scene.control.ChoiceBox?> <?import javafx.scene.layout.GridPane?> <?import java.lang.String?> <GridPane alignment="center" hgap="10" vgap="10" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller"> <ChoiceBox fx:id="choicebox" value="Value 3"> <items> <FXCollections fx:factory="observableArrayList"> <String fx:value="Value 1" /> <String fx:value="Value 2" /> <String fx:value="Value 3" /> </FXCollections> </items> </ChoiceBox> </GridPane>
ChoiceBox তৈরির পাশাপাশি কয়েকটা ভ্যালু সেট করে দিয়েছি। এবং ডিফল্ট একটা ভ্যালুও সেট করে দিয়েছি। এখন ChoiceBox এ যদি কোন চেঞ্জ হয়, তা আমরা দেখতে পারি এভাবেঃ
choiceBox.valueProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue observableValue, String oldValue, String newValue) { } });
কোন ভ্যালু চেঞ্জ হলে আমরা যে যে কোন কাজ করতে পারি। সম্পুর্ণ Java ফাইলঃ
import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.ChoiceBox; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); primaryStage.setTitle("ChoiceBox demo"); primaryStage.setScene(new Scene(root, 300, 275)); primaryStage.show(); ChoiceBox choiceBox = (ChoiceBox) root.lookup("#choicebox"); choiceBox.valueProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue observableValue, String oldValue, String newValue) { System.out.println(observableValue); System.out.println(oldValue); System.out.println(newValue); } }); } public static void main(String[] args) { launch(args); } }
আমরা যদি সিলেক্টেড আইটেমের ভ্যালু নিতে চাই, তা নিতে পারি এভাবেঃ
choiceBox.getSelectionModel().getSelectedItem()
আবার কোন ইনডেক্স টি সিলেক্টেড আছে, তা পেতে পারি এভাবেঃ
choiceBox.getSelectionModel().getSelectedIndex()
আমরা চাইলে ডিফল্ট ভাবে কোন ভ্যালু সেট না করে জাভা থেকে ভ্যালু গুলো সেট করতে পারি। তার জন্য fxml এ শুধু মাত্র ChoiceBox মার্কয়াপ যুক্ত করব এবং একটা আইডি দিবঃ
<ChoiceBox fx:id="choicebox" prefWidth="150.0" />
এরপর ChoiceBox টা একটা ভ্যারিয়েবলে সেট করব। এবং এরপর আমরা যে জাভা থেকে ভ্যালু সেট সহ সব কিছু করতে পারবঃ
ChoiceBox choiceBox = (ChoiceBox) root.lookup("#choicebox"); choiceBox.getItems().addAll("Value 1", "Value 2", "Value 3"); choiceBox.getSelectionModel().select("Value 1");
ধন্যবাদ।
Java GUI (Swing) দিয়ে গ্রাফিক্যাল ইউজার তৈরি করা যায়, সেখানেও এই সকল কম্পনেন্ট রয়েছে, তবে JavaFX টা আসলে কি কাজের জন্য? আমি আসলে জানতে চাচ্ছি, Java Swing, Java, JavaFX এর পার্থক্যটা? অনেকগুলো কম্পটেন্ট/অবজেক্ট নাই যেগুলো দরকার, সেগুলো কোথায় পাবো, যেমন : ছবি নিয়ে কাজ করার জন্য JLabel ব্যবাহর করা হয়, তবে Image/Picture নামে কোন অবজেক্ট/কম্পনেন্ট নাই।