
- JavaFX 教程
- JavaFX - 首頁
- JavaFX - 概述
- JavaFX 安裝和架構
- JavaFX - 環境
- JavaFX - 使用 Netbeans 安裝
- JavaFX - 使用 Eclipse 安裝
- JavaFX - 使用 Visual Studio Code 安裝
- JavaFX - 架構
- JavaFX - 應用程式
- JavaFX 2D 形狀
- JavaFX - 2D 形狀
- JavaFX - 繪製線條
- JavaFX - 繪製矩形
- JavaFX - 繪製圓角矩形
- JavaFX - 繪製圓形
- JavaFX - 繪製橢圓
- JavaFX - 繪製多邊形
- JavaFX - 繪製折線
- JavaFX - 繪製三次貝塞爾曲線
- JavaFX - 繪製二次貝塞爾曲線
- JavaFX - 繪製弧形
- JavaFX - 繪製 SVGPath
- JavaFX 2D 物件的屬性
- JavaFX - 描邊型別屬性
- JavaFX - 描邊寬度屬性
- JavaFX - 描邊填充屬性
- JavaFX - 描邊屬性
- JavaFX - 描邊線連線屬性
- JavaFX - 描邊斜接限制屬性
- JavaFX - 描邊線端點屬性
- JavaFX - 平滑屬性
- JavaFX 路徑物件
- JavaFX - 路徑物件
- JavaFX - LineTo 路徑物件
- JavaFX - HLineTo 路徑物件
- JavaFX - VLineTo 路徑物件
- JavaFX - QuadCurveTo 路徑物件
- JavaFX - CubicCurveTo 路徑物件
- JavaFX - ArcTo 路徑物件
- JavaFX 顏色和紋理
- JavaFX - 顏色
- JavaFX - 線性漸變圖案
- JavaFX - 徑向漸變圖案
- JavaFX 文字
- JavaFX - 文字
- JavaFX 效果
- JavaFX - 效果
- JavaFX - 顏色調整效果
- JavaFX - 顏色輸入效果
- JavaFX - 影像輸入效果
- JavaFX - 混合效果
- JavaFX - 輝光效果
- JavaFX - 泛光效果
- JavaFX - 方框模糊效果
- JavaFX - 高斯模糊效果
- JavaFX - 運動模糊效果
- JavaFX - 反射效果
- JavaFX - 褐色調效果
- JavaFX - 陰影效果
- JavaFX - 投影效果
- JavaFX - 內陰影效果
- JavaFX - 照明效果
- JavaFX - Light.Distant 效果
- JavaFX - Light.Spot 效果
- JavaFX - Point.Spot 效果
- JavaFX - 位移對映
- JavaFX - 透視變換
- JavaFX 動畫
- JavaFX - 動畫
- JavaFX - 旋轉過渡
- JavaFX - 縮放過渡
- JavaFX - 平移過渡
- JavaFX - 淡入淡出過渡
- JavaFX - 填充過渡
- JavaFX - 描邊過渡
- JavaFX - 順序過渡
- JavaFX - 並行過渡
- JavaFX - 暫停過渡
- JavaFX - 路徑過渡
- JavaFX 影像
- JavaFX - 影像
- JavaFX 3D 形狀
- JavaFX - 3D 形狀
- JavaFX - 建立立方體
- JavaFX - 建立圓柱體
- JavaFX - 建立球體
- 3D 物件的屬性
- JavaFX - 剔除面屬性
- JavaFX - 繪製模式屬性
- JavaFX - 材質屬性
- JavaFX 事件處理
- JavaFX - 事件處理
- JavaFX - 使用便捷方法
- JavaFX - 事件過濾器
- JavaFX - 事件處理程式
- JavaFX UI 控制元件
- JavaFX - UI 控制元件
- JavaFX - ListView
- JavaFX - Accordion
- JavaFX - ButtonBar
- JavaFX - ChoiceBox
- JavaFX - HTMLEditor
- JavaFX - MenuBar
- JavaFX - Pagination
- JavaFX - ProgressIndicator
- JavaFX - ScrollPane
- JavaFX - Separator
- JavaFX - Slider
- JavaFX - Spinner
- JavaFX - SplitPane
- JavaFX - TableView
- JavaFX - TabPane
- JavaFX - ToolBar
- JavaFX - TreeView
- JavaFX - Label
- JavaFX - CheckBox
- JavaFX - RadioButton
- JavaFX - TextField
- JavaFX - PasswordField
- JavaFX - FileChooser
- JavaFX - Hyperlink
- JavaFX - Tooltip
- JavaFX - Alert
- JavaFX - DatePicker
- JavaFX - TextArea
- JavaFX 圖表
- JavaFX - 圖表
- JavaFX - 建立餅圖
- JavaFX - 建立折線圖
- JavaFX - 建立面積圖
- JavaFX - 建立條形圖
- JavaFX - 建立氣泡圖
- JavaFX - 建立散點圖
- JavaFX - 建立堆疊面積圖
- JavaFX - 建立堆疊條形圖
- JavaFX 佈局窗格
- JavaFX - 佈局窗格
- JavaFX - HBox 佈局
- JavaFX - VBox 佈局
- JavaFX - BorderPane 佈局
- JavaFX - StackPane 佈局
- JavaFX - TextFlow 佈局
- JavaFX - AnchorPane 佈局
- JavaFX - TilePane 佈局
- JavaFX - GridPane 佈局
- JavaFX - FlowPane 佈局
- JavaFX CSS
- JavaFX - CSS
- JavaFX 中的媒體
- JavaFX - 處理媒體
- JavaFX - 播放影片
- JavaFX 有用資源
- JavaFX - 快速指南
- JavaFX - 有用資源
- JavaFX - 討論
JavaFX - 堆疊條形圖
StackedBarChart 是條形圖的一種變體,它繪製條形圖以指示某個類別的值。條形圖可以是垂直的或水平的,具體取決於哪個軸是類別軸。每個系列的條形圖堆疊在先前系列的頂部。
以下是堆疊條形圖,它描繪了人口增長。

JavaFX 中的堆疊條形圖
在 JavaFX 中,堆疊條形圖由名為 StackedBarChart 的類表示。此類屬於 javafx.scene.chart 包。透過例項化此類,您可以在 JavaFX 中建立 StackedBarChart 節點。
要在 JavaFX 中生成堆疊條形圖,請按照以下步驟操作。
步驟 1:定義軸
定義堆疊條形圖的 X 軸和 Y 軸,併為其設定標籤。在我們的示例中,X 軸表示大洲,Y 軸表示以百萬計的人口。
public class ClassName extends Application { @Override public void start(Stage primaryStage) throws Exception { //Defining the x axis CategoryAxis xAxis = new CategoryAxis(); xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList ("Africa", "America", "Asia", "Europe", "Oceania"))); xAxis.setLabel("category"); //Defining the y axis NumberAxis yAxis = new NumberAxis(); yAxis.setLabel("Population (In millions)"); } }
步驟 2:建立堆疊條形圖
透過例項化 javafx.scene.chart 包中名為 StackedBarChart 的類來建立一個折線圖。在此類的建構函式中,傳遞表示在先前步驟中建立的 X 軸和 Y 軸的物件。
//Creating the Bar chart StackedBarChart<String, Number> stackedBarChart = new StackedBarChart<>(xAxis, yAxis); stackedBarChart.setTitle("Historic World Population by Region");
步驟 3:準備資料
例項化 XYChart.Series 類並將資料(一系列 x 和 y 座標)新增到此類的 Observable 列表中,如下所示:
//Prepare XYChart.Series objects by setting data XYChart.Series<String, Number> series1 = new XYChart.Series<>(); series1.setName("1800"); series1.getData().add(new XYChart.Data<>("Africa", 107)); series1.getData().add(new XYChart.Data<>("America", 31)); series1.getData().add(new XYChart.Data<>("Asia", 635)); series1.getData().add(new XYChart.Data<>("Europe", 203)); series1.getData().add(new XYChart.Data<>("Oceania", 2)); XYChart.Series<String, Number> series2 = new XYChart.Series<>(); series2.setName("1900"); series2.getData().add(new XYChart.Data<>("Africa", 133)); series2.getData().add(new XYChart.Data<>("America", 156)); series2.getData().add(new XYChart.Data<>("Asia", 947)); series2.getData().add(new XYChart.Data<>("Europe", 408)); series1.getData().add(new XYChart.Data<>("Oceania", 6)); XYChart.Series<String, Number> series3 = new XYChart.Series<>(); series3.setName("2008"); series3.getData().add(new XYChart.Data<>("Africa", 973)); series3.getData().add(new XYChart.Data<>("America", 914)); series3.getData().add(new XYChart.Data<>("Asia", 4054)); series3.getData().add(new XYChart.Data<>("Europe", 732)); series1.getData().add(new XYChart.Data<>("Oceania", 34));
步驟 4:將資料新增到堆疊條形圖
將上一步中準備好的資料系列新增到條形圖中,如下所示:
//Setting the data to bar chart stackedBarChart.getData().addAll(series1, series2, series3);
步驟 5:建立 Group 物件
在 start() 方法中,透過例項化名為 Group 的類來建立組物件。這屬於 javafx.scene 包。
將上一步中建立的 StackedBarChart(節點)物件作為引數傳遞給 Group 類的建構函式。應執行此操作以將其新增到組中,如下所示:
Group root = new Group(stackedBarChart);
步驟 6:啟動應用程式
最後,請按照以下步驟正確啟動應用程式:
首先,透過將 Group 物件作為引數值傳遞給其建構函式來例項化名為 Scene 的類。在此建構函式中,您還可以將應用程式螢幕的尺寸作為可選引數傳遞。
然後,使用 Stage 類的 setTitle() 方法設定階段的標題。
現在,使用名為 Stage 的類的 setScene() 方法將 Scene 物件新增到舞臺。
使用名為 show() 的方法顯示場景的內容。
最後,應用程式在 launch() 方法的幫助下啟動。
示例
下表列出了 1800 年、1900 年和 2008 年各個大洲的人口。
非洲 | 美洲 | 亞洲 | 歐洲 | 大洋洲 | |
---|---|---|---|---|---|
1800 | 107 | 31 | 635 | 203 | 2 |
1900 | 133 | 156 | 947 | 408 | 6 |
2008 | 973 | 914 | 4054 | 732 | 34 |
以下是一個 Java 程式,它使用 JavaFX 生成一個堆疊條形圖來描繪上述資料。
將此程式碼儲存在名為 StackedBarChartExample.java 的檔案中。
import java.util.Arrays; import javafx.application.Application; import javafx.collections.FXCollections; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.chart.CategoryAxis; import javafx.stage.Stage; import javafx.scene.chart.NumberAxis; import javafx.scene.chart.StackedBarChart; import javafx.scene.chart.XYChart; public class StackedBarChartExample extends Application { @Override public void start(Stage stage) { //Defining the axes CategoryAxis xAxis = new CategoryAxis(); xAxis.setCategories(FXCollections.<String>observableArrayList(Arrays.asList ("Africa", "America", "Asia", "Europe", "Oceania"))); xAxis.setLabel("category"); NumberAxis yAxis = new NumberAxis(); yAxis.setLabel("Population (In millions)"); //Creating the Bar chart StackedBarChart<String, Number> stackedBarChart = new StackedBarChart<>(xAxis, yAxis); stackedBarChart.setTitle("Historic World Population by Region"); //Prepare XYChart.Series objects by setting data XYChart.Series<String, Number> series1 = new XYChart.Series<>(); series1.setName("1800"); series1.getData().add(new XYChart.Data<>("Africa", 107)); series1.getData().add(new XYChart.Data<>("America", 31)); series1.getData().add(new XYChart.Data<>("Asia", 635)); series1.getData().add(new XYChart.Data<>("Europe", 203)); series1.getData().add(new XYChart.Data<>("Oceania", 2)); XYChart.Series<String, Number> series2 = new XYChart.Series<>(); series2.setName("1900"); series2.getData().add(new XYChart.Data<>("Africa", 133)); series2.getData().add(new XYChart.Data<>("America", 156)); series2.getData().add(new XYChart.Data<>("Asia", 947)); series2.getData().add(new XYChart.Data<>("Europe", 408)); series1.getData().add(new XYChart.Data<>("Oceania", 6)); XYChart.Series<String, Number> series3 = new XYChart.Series<>(); series3.setName("2008"); series3.getData().add(new XYChart.Data<>("Africa", 973)); series3.getData().add(new XYChart.Data<>("America", 914)); series3.getData().add(new XYChart.Data<>("Asia", 4054)); series3.getData().add(new XYChart.Data<>("Europe", 732)); series1.getData().add(new XYChart.Data<>("Oceania", 34)); //Setting the data to bar chart stackedBarChart.getData().addAll(series1, series2, series3); //Creating a Group object Group root = new Group(stackedBarChart); //Creating a scene object Scene scene = new Scene(root, 600, 400); //Setting title to the Stage stage.setTitle("stackedBarChart"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); } public static void main(String args[]){ launch(args); } }
使用以下命令從命令提示符編譯並執行儲存的 java 檔案。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls StackedBarChartExample.java java --module-path %PATH_TO_FX% --add-modules javafx.controls StackedBarChartExample
輸出
執行後,上述程式會生成一個 JavaFX 視窗,顯示如下所示的面積圖。

示例
下表顯示了某組織在一年第一季度裁員和招聘的員工資料。
月份 | 裁員人數 | 招聘人數 |
---|---|---|
一月 | 30 | 12 |
二月 | 12 | 54 |
三月 | 31 | 24 |
四月 | 52 | 32 |
五月 | 4 | 43 |
六月 | 10 | 5 |
以下是一個 Java 程式,它使用 JavaFX 生成一個堆疊條形圖來描繪上述資料。
將此程式碼儲存在名為 StackedBarChartEmployees.java 的檔案中。
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.chart.StackedBarChart; import javafx.scene.chart.CategoryAxis; import javafx.stage.Stage; import javafx.scene.chart.NumberAxis; import javafx.scene.chart.XYChart; public class StackedBarChartEmployees extends Application { @Override public void start(Stage stage) { //Defining the X axis CategoryAxis xAxis = new CategoryAxis(); //defining the y Axis NumberAxis yAxis = new NumberAxis(); yAxis.setLabel("Number of Employees"); //Creating the Area chart StackedBarChartstackedbarChart = new StackedBarChart(xAxis, yAxis); stackedbarChart.setTitle("Employees Recruitment to Lay off ratio"); //Prepare XYChart.Series objects by setting data XYChart.Series series1 = new XYChart.Series(); series1.setName("Employees Laid Off"); series1.getData().add(new XYChart.Data("January", 30)); series1.getData().add(new XYChart.Data("February", 12)); series1.getData().add(new XYChart.Data("March", 31)); series1.getData().add(new XYChart.Data("April", 52)); series1.getData().add(new XYChart.Data("May", 4)); series1.getData().add(new XYChart.Data("June", 10)); XYChart.Series series2 = new XYChart.Series(); series2.setName("Employees Recruited"); series2.getData().add(new XYChart.Data("January", 12)); series2.getData().add(new XYChart.Data("February", 54)); series2.getData().add(new XYChart.Data("March", 24)); series2.getData().add(new XYChart.Data("April", 32)); series2.getData().add(new XYChart.Data("May", 43)); series2.getData().add(new XYChart.Data("June", 5)); //Setting the XYChart.Series objects to stacked bar chart stackedbarChart.getData().addAll(series1,series2); //Creating a Group object Group root = new Group(stackedbarChart); //Creating a scene object Scene scene = new Scene(root, 600, 400); //Setting title to the Stage stage.setTitle("Stacked Bar Chart"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); } public static void main(String args[]){ launch(args); } }
使用以下命令從命令提示符編譯並執行儲存的 java 檔案。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls StackedBarChartEmployees.java java --module-path %PATH_TO_FX% --add-modules javafx.controls StackedBarChartEmployees
輸出
執行後,上述程式會生成一個 JavaFX 視窗,顯示如下所示的面積圖。
