import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.chart.PieChart.Data;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class Main extends Application {
public void start(Stage stage) {
// يمثل الرسم البياني الذي نريد إضافته في النافذة PieChart هنا قمنا بإنشاء كائن من الكلاس
PieChart pieChart = new PieChart();
// يمثل عناوين و نسب البيانات التي نريد عرضها في الرسم البياني Observableهنا قمنا بإنشاء كائن من الكلاس
ObservableList<Data> chartData = FXCollections.observableArrayList
new PieChart.Data("Iphone X", 25),
new PieChart.Data("Nokia Lumia 1020", 12),
new PieChart.Data("Huawei P30", 26),
new PieChart.Data("Samsung S9", 24),
new PieChart.Data("Google Pixel 3", 16)
// الذي يمثل الرسم البياني pieChart هنا وضعنا عنوان للكائن
pieChart.setTitle("Mobile Sales 2019");
// حتى يتم عرض محتواه عليه pieChart للكائن chartData هنا مررنا الكائن
pieChart.setData(chartData);
// عند تمرير الفأرة فوقه pieChart لأننا سنستخدمه لعرض نسبة كل جزء في الكائن Label هنا قمنا بإنشاء كائن من الكلاس
Label caption = new Label("");
// caption هنا قمنا بتحديد لون و حجم خط النص الكائن
caption.setTextFill(Color.BLACK);
caption.setStyle("-fx-font: 16 Tahoma;");
// هنا قمنا بتحديد ما سيحدث عند تمرير الفأرة فوق أي جزء في الرسم البياني
pieChart.getData().forEach((data) -> {
// هنا قلنا أنه سيتم جلب قيمة الجزء و عرضها فوق سهم الفأرة
data.getNode().addEventHandler(MouseEvent.MOUSE_MOVED, (MouseEvent e) -> {
caption.setTranslateX(e.getX());
caption.setTranslateY(e.getY()-20);
caption.setText(data.getPieValue() + "%");
// في النافذة Root Node لأننا ننوي جعله الـ StackPane هنا قمنا بإنشاء كائن من الكلاس
StackPane root = new StackPane();
// root في الكائن caption و pieChart هنا قمنا بإضافة الكائنين
root.getChildren().addAll(pieChart, caption);
// فيها و تحديد حجمها Node كأول root هنا قمنا بإنشاء محتوى النافذة مع تعيين الكائن
Scene scene = new Scene(root, 400, 340•);
// هنا وضعنا عنوان للنافذة
stage.setTitle("JavaFX PieChart");
// أي وضعنا محتوى النافذة الذي قمنا بإنشائه للنافذة .stage في كائن الـ scene هنا وضعنا كائن الـ
// هنا قمنا بإظهار النافذة
// هنا قمنا بتشغيل التطبيق
public static void main(String[] args) {
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.chart.PieChart.Data;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage stage) {
// يمثل الرسم البياني الذي نريد إضافته في النافذة PieChart هنا قمنا بإنشاء كائن من الكلاس
PieChart pieChart = new PieChart();
// يمثل عناوين و نسب البيانات التي نريد عرضها في الرسم البياني Observableهنا قمنا بإنشاء كائن من الكلاس
ObservableList<Data> chartData = FXCollections.observableArrayList
(
new PieChart.Data("Iphone X", 25),
new PieChart.Data("Nokia Lumia 1020", 12),
new PieChart.Data("Huawei P30", 26),
new PieChart.Data("Samsung S9", 24),
new PieChart.Data("Google Pixel 3", 16)
);
// الذي يمثل الرسم البياني pieChart هنا وضعنا عنوان للكائن
pieChart.setTitle("Mobile Sales 2019");
// حتى يتم عرض محتواه عليه pieChart للكائن chartData هنا مررنا الكائن
pieChart.setData(chartData);
// عند تمرير الفأرة فوقه pieChart لأننا سنستخدمه لعرض نسبة كل جزء في الكائن Label هنا قمنا بإنشاء كائن من الكلاس
Label caption = new Label("");
// caption هنا قمنا بتحديد لون و حجم خط النص الكائن
caption.setTextFill(Color.BLACK);
caption.setStyle("-fx-font: 16 Tahoma;");
// هنا قمنا بتحديد ما سيحدث عند تمرير الفأرة فوق أي جزء في الرسم البياني
pieChart.getData().forEach((data) -> {
// هنا قلنا أنه سيتم جلب قيمة الجزء و عرضها فوق سهم الفأرة
data.getNode().addEventHandler(MouseEvent.MOUSE_MOVED, (MouseEvent e) -> {
caption.setTranslateX(e.getX());
caption.setTranslateY(e.getY()-20);
caption.setText(data.getPieValue() + "%");
});
});
// في النافذة Root Node لأننا ننوي جعله الـ StackPane هنا قمنا بإنشاء كائن من الكلاس
StackPane root = new StackPane();
// root في الكائن caption و pieChart هنا قمنا بإضافة الكائنين
root.getChildren().addAll(pieChart, caption);
// فيها و تحديد حجمها Node كأول root هنا قمنا بإنشاء محتوى النافذة مع تعيين الكائن
Scene scene = new Scene(root, 400, 340•);
// هنا وضعنا عنوان للنافذة
stage.setTitle("JavaFX PieChart");
// أي وضعنا محتوى النافذة الذي قمنا بإنشائه للنافذة .stage في كائن الـ scene هنا وضعنا كائن الـ
stage.setScene(scene);
// هنا قمنا بإظهار النافذة
stage.show();
}
// هنا قمنا بتشغيل التطبيق
public static void main(String[] args) {
launch(args);
}
}