openplanning

Hướng dẫn và ví dụ JavaFX PieChart

Xem thêm các chuyên mục:

Nhóm phát triển của chúng tôi vừa ra mắt website langlearning.net học tiếng Anh, Nga, Đức, Pháp, Việt, Trung, Hàn, Nhật, ... miễn phí cho tất cả mọi người.
Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.
Hãy theo dõi chúng tôi trên Fanpage để nhận được thông báo mỗi khi có bài viết mới. Facebook

1- JavaFX PieChart

JavaFX PieChart là một biểu đồ đại diện cho các dữ liệu trong một đường tròn được phân chia thành các nêm tam giác (triangular wedges) còn được gọi là các lát bánh (slice). Mỗi một slice đại diện cho phần trăm tương ứng với giá trị cụ thể.
Số liệu GDP một số nước năm 2015:
Country GDP (Million dollars)
USA 17.947.195
EU 11.540.278
China 10.982.829
Japan 4.116.242
Others 28.584.442

2- Ví dụ PieChart

Ví dụ dưới đây là biểu đồ PieChart mô tả GDP của các nước năm 2015.
PieChartDemo.java

package org.o7planning.javafx.piechart;

import javafx.application.Application;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class PieChartDemo extends Application {

   @Override
   public void start(Stage primaryStage) throws Exception {

       PieChart pieChart = new PieChart();

       PieChart.Data slice1 = new PieChart.Data("USA", 17947195);
       PieChart.Data slice2 = new PieChart.Data("EU", 11540278);
       PieChart.Data slice3 = new PieChart.Data("China", 10982829);
       PieChart.Data slice4 = new PieChart.Data("Japan", 4116242);
       PieChart.Data slice5 = new PieChart.Data("Others", 28584442);

       pieChart.getData().add(slice1);
       pieChart.getData().add(slice2);
       pieChart.getData().add(slice3);
       pieChart.getData().add(slice4);
       pieChart.getData().add(slice5);
     
       pieChart.setLegendSide(Side.LEFT);

       primaryStage.setTitle("JavaFX PieChart (o7planning.org)");
       StackPane root = new StackPane(pieChart);

       Scene scene = new Scene(root, 400, 200);

       primaryStage.setScene(scene);

       primaryStage.show();
   }

   public static void main(String[] args) {
       Application.launch(args);
   }
}

3- Tùy biến PieChart

Mặc định PieChart hiển thị đầy đủ các thành phần của nó, bao gồm các Label, và Legend. Bạn có thể sét đặt các thành phần này có hiển thị hoặc không bởi phương thức setLabelsVisile, setLegendVisible.
 

pieChart.setLabelsVisile(false);
pieChart.setLegendVisible(false);
Sét đặt vị trí hiển thị Legend và độ dài của Label Line.
 

chart.setLabelLineLength(10);
chart.setLegendSide(Side.LEFT);
Theo mặc định các lát (Slice) được đặt theo cùng chiều kim đồng hồ. Tuy nhiên bạn cũng có thể đặt theo chiều ngược lại bằng cách sử dụng phương thức setClockwise(false).
Cùng chiều kim đồng hồ:
Ngược chiều kim đồng hồ:
Bạn cũng có thể thay đổi góc bắt đầu của PieChart thông qua phương thức setStartAngle.
.

pieChart.setStartAngle(30);

4- PieChart và sự kiện

Mặc dù các lát (Slice) của PieChart không phải là một đối tượng Node, nhưng mỗi PieChart.Data có một thành phần Node liên hợp với nó, và bạn có thể sử dụng để sử lý các sự kiện cho phù hợp.
PieChartEventDemo.java

package org.o7planning.javafx.piechart;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class PieChartEventDemo extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {

        PieChart pieChart = new PieChart();

        PieChart.Data slice1 = new PieChart.Data("USA", 17947195);
        PieChart.Data slice2 = new PieChart.Data("EU", 11540278);
        PieChart.Data slice3 = new PieChart.Data("China", 10982829);
        PieChart.Data slice4 = new PieChart.Data("Japan", 4116242);
        PieChart.Data slice5 = new PieChart.Data("Others", 28584442);

        pieChart.getData().add(slice1);
        pieChart.getData().add(slice2);
        pieChart.getData().add(slice3);
        pieChart.getData().add(slice4);
        pieChart.getData().add(slice5);
       
        pieChart.setPrefSize(400, 300);

        pieChart.setLegendSide(Side.LEFT);
        pieChart.setStartAngle(30);

        final Label caption = new Label("");
        caption.setTextFill(Color.WHITE);
        caption.setStyle("-fx-font: 12 arial;");

        for (final PieChart.Data data : pieChart.getData()) {
            data.getNode().addEventHandler(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
                @Override
                public void handle(MouseEvent e) {
                    caption.setTranslateX(e.getSceneX());
                    caption.setTranslateY(e.getSceneY());

                    caption.setText(String.valueOf(data.getPieValue()));
                }
            });
        }

        primaryStage.setTitle("JavaFX PieChart (o7planning.org)");
        AnchorPane root = new AnchorPane();
        root.getChildren().addAll(pieChart, caption);
       
       

        Scene scene = new Scene(root, 400, 300);

        primaryStage.setScene(scene);

        primaryStage.show();
    }

    public static void main(String[] args) {
        Application.launch(args);
    }
}

Xem thêm các chuyên mục: