JavaFXطريقة إنشاء ListView لإختيار الألوان
المثال التالي يعلمك طريقة إنشاء ListView لإختيار الألوان.
مثال
import javafx.scene.control.ListCell;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
// ListView هنا قمنا بإنشاء كلاس خاص يعطينا شكل مستطيل يمكن وضعه كعنصر في كائن من الكلاس
public class ColorRectCell extends ListCell<String> {
@Override
public void updateItem(String item, boolean empty) {
// هنا قمنا باستدعاء دالة تحديث شكل العنصر الجاهزة لأننا على أساسها سنضيف مستطيل مربع مكان العنصر
super.updateItem(item, empty);
// هنا قمنا بتحديد حجم المستطيل
Rectangle rect = new Rectangle(122, 20);
// عند ربطهما ببعض ListView هنا قمنا بتحديد أن لون المستطيل سيتم أخذه من إسم عنصر كائن
if (item != null) {
rect.setFill(Color.web(item));
setGraphic(rect);
}
else {
setGraphic(null);
}
}
}
import javafx.scene.control.ListCell;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
// ListView هنا قمنا بإنشاء كلاس خاص يعطينا شكل مستطيل يمكن وضعه كعنصر في كائن من الكلاس
public class ColorRectCell extends ListCell<String> {
@Override
public void updateItem(String item, boolean empty) {
// هنا قمنا باستدعاء دالة تحديث شكل العنصر الجاهزة لأننا على أساسها سنضيف مستطيل مربع مكان العنصر
super.updateItem(item, empty);
// هنا قمنا بتحديد حجم المستطيل
Rectangle rect = new Rectangle(122, 20);
// عند ربطهما ببعض ListView هنا قمنا بتحديد أن لون المستطيل سيتم أخذه من إسم عنصر كائن
if (item != null) {
rect.setFill(Color.web(item));
setGraphic(rect);
}
else {
setGraphic(null);
}
}
}
import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage stage) {
// هنا قمنا بإنشاء جميع الأشياء التي سنضيفها في النافذة
Label label = new Label();
ListView<String> listView = new ListView<>();
// يمثل مجموعة العناصر التي ستظهر في القائمة ObservableList هنا قمنا بإنشاء كائن من الكلاس
ObservableList<String> items = FXCollections.observableArrayList(
"red", "blue", "green", "yellow", "orange", "brown", "pink", "purple", "gray", "black", "white"
);
// listView كعناصر للكائن items هنا قمنا بوضع عناصر الكائن
listView.setItems(items);
// أي إلى مستطيل لونه من إسمه ColorRectCell إلى كائن من الكلاس listView هنا قمنا بتحويل كل عنصر في الـ
listView.setCellFactory((ListView<String> ol) -> new ColorRectCell());
// هنا قمنا بتحديد حجم الأشياء التي سنضيفها في النافذة
label.setPrefSize(200, 30);
listView.setPrefSize(152, 250);
// هنا قمنا بتحديد مكان ظهور الأشياء التي سنضيفها في النافذة
label.setTranslateX(180);
label.setTranslateY(110);
listView.setTranslateX(0);
listView.setTranslateY(0);
label.setFont(new Font("Arial", 22));
// في النافذة Root Node لأننا ننوي جعله الـ Group هنا قمنا بإنشاء كائن من الكلاس
Group root = new Group();
// root هنا قمنا بإضافة جميع الأشياء في الكائن
root.getChildren().add(label);
root.getChildren().add(listView);
// فيها و تحديد حجمها Node كأول root هنا قمنا بإنشاء محتوى النافذة مع تعيين الكائن
Scene scene = new Scene(root, 400, 250);
// هنا وضعنا عنوان للنافذة
stage.setTitle("JavaFX ListView");
// أي وضعنا محتوى النافذة الذي قمنا بإنشائه للنافذة .stage في كائن الـ scene هنا وضعنا كائن الـ
stage.setScene(scene);
// هنا قمنا بإظهار النافذة
stage.show();
// listView هنا قمنا بتحديد ماذا سيحدث عند النقر على أي عنصر موجود في الـ
listView.getSelectionModel().selectedItemProperty().addListener(
(ObservableValue<? extends String> ov, String old_val, String new_val) -> {
// label هنا جعلنا إسم العنصر الذي تم إختياره يوضع كنص للكائن
label.setText(new_val);
// label هنا جعلنا إسم العنصر الذي تم إختياره يوضع كلون خط للكائن
label.setTextFill(Color.web(new_val));
});
}
// هنا قمنا بتشغيل التطبيق
public static void main(String[] args) {
launch(args);
}
}
import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage stage) {
// هنا قمنا بإنشاء جميع الأشياء التي سنضيفها في النافذة
Label label = new Label();
ListView<String> listView = new ListView<>();
// يمثل مجموعة العناصر التي ستظهر في القائمة ObservableList هنا قمنا بإنشاء كائن من الكلاس
ObservableList<String> items = FXCollections.observableArrayList(
"red", "blue", "green", "yellow", "orange", "brown", "pink", "purple", "gray", "black", "white"
);
// listView كعناصر للكائن items هنا قمنا بوضع عناصر الكائن
listView.setItems(items);
// أي إلى مستطيل لونه من إسمه ColorRectCell إلى كائن من الكلاس listView هنا قمنا بتحويل كل عنصر في الـ
listView.setCellFactory((ListView<String> ol) -> new ColorRectCell());
// هنا قمنا بتحديد حجم الأشياء التي سنضيفها في النافذة
label.setPrefSize(200, 30);
listView.setPrefSize(152, 250);
// هنا قمنا بتحديد مكان ظهور الأشياء التي سنضيفها في النافذة
label.setTranslateX(180);
label.setTranslateY(110);
listView.setTranslateX(0);
listView.setTranslateY(0);
label.setFont(new Font("Arial", 22));
// في النافذة Root Node لأننا ننوي جعله الـ Group هنا قمنا بإنشاء كائن من الكلاس
Group root = new Group();
// root هنا قمنا بإضافة جميع الأشياء في الكائن
root.getChildren().add(label);
root.getChildren().add(listView);
// فيها و تحديد حجمها Node كأول root هنا قمنا بإنشاء محتوى النافذة مع تعيين الكائن
Scene scene = new Scene(root, 400, 250);
// هنا وضعنا عنوان للنافذة
stage.setTitle("JavaFX ListView");
// أي وضعنا محتوى النافذة الذي قمنا بإنشائه للنافذة .stage في كائن الـ scene هنا وضعنا كائن الـ
stage.setScene(scene);
// هنا قمنا بإظهار النافذة
stage.show();
// listView هنا قمنا بتحديد ماذا سيحدث عند النقر على أي عنصر موجود في الـ
listView.getSelectionModel().selectedItemProperty().addListener(
(ObservableValue<? extends String> ov, String old_val, String new_val) -> {
// label هنا جعلنا إسم العنصر الذي تم إختياره يوضع كنص للكائن
label.setText(new_val);
// label هنا جعلنا إسم العنصر الذي تم إختياره يوضع كلون خط للكائن
label.setTextFill(Color.web(new_val));
});
}
// هنا قمنا بتشغيل التطبيق
public static void main(String[] args) {
launch(args);
}
}
ستظهر لك النافذة التالية عند التشغيل.