📅  最后修改于: 2023-12-03 15:31:35.964000             🧑  作者: Mango
JavaFX 饼图类是用于创建饼图的类,它提供了一个可视化的方式展示数据占比。该类位于 javafx.scene.chart.PieChart
包中,并且继承自 javafx.scene.chart.Chart
.
创建一个饼图的基本步骤如下:
Group
对象,并加入到场景图中。我们使用 Group
对象来包含我们创建的饼图。ObservableList
对象,用来存放饼图的数据。PieChart
对象,将 ObservableList
对象作为参数传入。PieChart
对象加入到 Group
对象中。下面是一个简单的示例代码:
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.stage.Stage;
public class MyPieChart extends Application {
@Override
public void start(Stage primaryStage) {
//1.创建一个Group对象
Group root = new Group();
//2.创建数据列表
ObservableList<PieChart.Data> pieChartData =
FXCollections.observableArrayList(
new PieChart.Data("Apple", 30),
new PieChart.Data("Banana", 20),
new PieChart.Data("Grape", 40),
new PieChart.Data("Orange", 10));
//3.创建一个饼图对象
PieChart chart = new PieChart(pieChartData);
chart.setTitle("Fruit");
//4.将饼图加入到group中
root.getChildren().add(chart);
//创建一个Scene对象
Scene scene = new Scene(root, 600, 400);
//将Scene对象添加到primaryStage窗口中
primaryStage.setScene(scene);
//显示primaryStage窗口
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
上面的代码中,我们首先创建了一个 Group
对象,并将其加入到场景图中。然后,我们创建了一个 ObservableList
对象来存放饼图的数据,最后创建了一个 PieChart
对象以及相关的配置。
JavaFX 饼图类允许您自定义饼图的各个方面。以下是一些常见的自定义饼图的方法:
鼠标悬停效果是饼图的一种常见效果。要设置这个效果,我们只需要使用 setOnMouseEntered()
和 setOnMouseExited()
方法,并通过 JavaFX 的 Timeline
类来创建一个渐变效果。以下是一个例子:
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.effect.Glow;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Duration;
public class CustomPieChart extends Application {
private Text caption;
@Override
public void start(Stage primaryStage) {
//1.创建一个Group对象
Group root = new Group();
//2.创建数据列表
ObservableList<PieChart.Data> pieChartData =
FXCollections.observableArrayList(
new PieChart.Data("Apple", 30),
new PieChart.Data("Banana", 20),
new PieChart.Data("Grape", 40),
new PieChart.Data("Orange", 10));
//3.创建一个饼图对象
PieChart chart = new PieChart(pieChartData);
chart.setTitle("Fruit");
chart.setLegendVisible(false);
//4.修改slice渲染器
for (final PieChart.Data data : chart.getData()) {
data.getNode().setStyle("-fx-pie-color: " + data.getName().toLowerCase() + ";");
final Glow glow = new Glow();
glow.setInput(new Glow());
data.getNode().setEffect(null);
data.getNode().setOnMouseEntered(e -> {
data.getNode().setEffect(glow);
caption.setX(data.getNode().getLayoutX());
caption.setY(data.getNode().getLayoutY() - 30);
caption.setFill(Color.WHITE);
caption.setText(data.getName() + "\n" + data.getPieValue() + "%");
});
data.getNode().setOnMouseExited(e -> {
data.getNode().setEffect(null);
caption.setVisible(false);
});
}
//5.创建一个文本对象用于显示鼠标悬停时的标签
caption = new Text("");
caption.setFont(Font.font("Verdana", 15));
caption.setVisible(false);
//6.将饼图以及文本加入到group中
root.getChildren().addAll(chart, caption);
//创建一个Scene对象
Scene scene = new Scene(root, 600, 400);
//将Scene对象添加到primaryStage窗口中
primaryStage.setScene(scene);
//显示primaryStage窗口
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
在上面的代码中,我们为每个切片设置了鼠标事件,并在鼠标悬停时添加了一个 Glow
特效和一个文本标签。
JavaFX 饼图类允许您自定义每个切片的颜色。要实现这一点,我们可以为每个 PieChart.Data
对象设置颜色。下面是一个例子:
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.stage.Stage;
public class CustomPieChart extends Application {
@Override
public void start(Stage primaryStage) {
//1.创建一个Group对象
Group root = new Group();
//2.创建数据列表
ObservableList<PieChart.Data> pieChartData =
FXCollections.observableArrayList(
new PieChart.Data("Apple", 30),
new PieChart.Data("Banana", 20),
new PieChart.Data("Grape", 40),
new PieChart.Data("Orange", 10));
//3.创建一个饼图对象
PieChart chart = new PieChart(pieChartData);
chart.setTitle("Fruit");
chart.setLegendVisible(false);
//4.修改slice渲染器
for (final PieChart.Data data : chart.getData()) {
data.getNode().setStyle("-fx-pie-color: " + data.getName().toLowerCase() + ";");
}
//5.将饼图加入到group中
root.getChildren().add(chart);
//创建一个Scene对象
Scene scene = new Scene(root, 600, 400);
//将Scene对象添加到primaryStage窗口中
primaryStage.setScene(scene);
//显示primaryStage窗口
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
上面的代码中,我们为每个 PieChart.Data
对象设置了颜色。注意,颜色可以是 CSS 颜色,也可以是十六进制颜色。
JavaFX 饼图类是一个非常强大的类,可以很容易地创建和自定义饼图。通过 JavaFX 饼图类,您可以轻松地显示和比较数据,而无需编写复杂的代码。