<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # JFreeChart 教程 原文:http://zetcode.com/java/jfreechart/ 在本教程中,我們學習如何使用 JFreeChart。 我們展示了如何創建各種類型的圖表。 圖表顯示在 Swing 應用中,并保存到圖像文件中。 我們使用 Java Servlet 在 Web 瀏覽器中創建和呈現圖表,并從 MySQL 數據庫檢索圖表數據。 ## JFreeChart 庫 圖表是一種以簡單方式顯示信息的圖形,通常使用直線和曲線來顯示金額。 JFreeChart 是用于創建圖表的流行 Java 庫。 JFreeChart 允許創建各種交互式和非交互式圖表。 我們可以創建折線圖,條形圖,面積圖,散點圖,餅圖,甘特圖和各種專用圖,例如風向圖或氣泡圖。 JFreeChart 可以廣泛地定制; 它允許修改圖表項目的顏色和繪制,圖例,線條或標記的樣式。 它會自動繪制軸刻度和圖例。 圖表具有內置功能,可使用鼠標放大。 現有的圖表可以通過庫在其數據集合上具有的監聽器輕松更新。 它支持多種輸出格式,包括 PNG,JPEG,PDF 和 SVG。 JFreeChart 由 David Gilbert 于 2000 年創立。如今,JFreeChart 是 Java 開發者中使用最廣泛的圖表庫。 ## JFreeChart Maven 依賴項 ```java <dependency> <groupId>org.jfree</groupId> <artifactId>jfreechart</artifactId> <version>1.0.19</version> </dependency> ``` 對于我們的項目,我們使用此 Maven 依賴項。 ## JFreeChart 折線圖 折線圖是一種基本類型的圖表,它將信息顯示為由直線段連接的一系列數據點。 JavaFX 中的折線圖是使用`ChartFactory.createXYLineChart()`創建的。 `LineChartEx.java` ```java package com.zetcode.linechartex; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.SwingUtilities; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.block.BlockBorder; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.chart.title.TextTitle; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; public class LineChartEx extends JFrame { public LineChartEx() { initUI(); } private void initUI() { XYDataset dataset = createDataset(); JFreeChart chart = createChart(dataset); ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15)); chartPanel.setBackground(Color.white); add(chartPanel); pack(); setTitle("Line chart"); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private XYDataset createDataset() { XYSeries series = new XYSeries("2016"); series.add(18, 567); series.add(20, 612); series.add(25, 800); series.add(30, 980); series.add(40, 1410); series.add(50, 2350); XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addSeries(series); return dataset; } private JFreeChart createChart(XYDataset dataset) { JFreeChart chart = ChartFactory.createXYLineChart( "Average salary per age", "Age", "Salary (€)", dataset, PlotOrientation.VERTICAL, true, true, false ); XYPlot plot = chart.getXYPlot(); XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(); renderer.setSeriesPaint(0, Color.RED); renderer.setSeriesStroke(0, new BasicStroke(2.0f)); plot.setRenderer(renderer); plot.setBackgroundPaint(Color.white); plot.setRangeGridlinesVisible(true); plot.setRangeGridlinePaint(Color.BLACK); plot.setDomainGridlinesVisible(true); plot.setDomainGridlinePaint(Color.BLACK); chart.getLegend().setFrame(BlockBorder.NONE); chart.setTitle(new TextTitle("Average Salary per Age", new Font("Serif", java.awt.Font.BOLD, 18) ) ); return chart; } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { LineChartEx ex = new LineChartEx(); ex.setVisible(true); }); } } ``` 在示例中,我們創建了一個折線圖,顯示每個年齡段的平均工資。 ```java XYSeries series = new XYSeries("2016"); series.add(18, 567); series.add(20, 612); series.add(25, 800); ... ``` `XYSeries`表示形式為`(x, y)`的零個或多個數據項的序列。 ```java XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addSeries(series); ``` 該系列將添加到`XYSeriesCollection`中,該`XYSeriesCollection`是可以用作數據集的`XYSeries`對象的集合。 ```java JFreeChart chart = ChartFactory.createXYLineChart( "Average salary per age", "Age", "Salary (€)", dataset, PlotOrientation.VERTICAL, true, true, false ); ``` `ChartFactory.createXYLineChart()`創建一個新的折線圖。 該方法的參數是:圖表標題,X 軸標簽,Y 軸標簽,數據,繪圖方向和三個標志,指示是否顯示圖例,工具提示和 URL。 ```java XYPlot plot = chart.getXYPlot(); ``` 我們可以參考該圖以對其進行自定義。 ```java XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(); renderer.setSeriesPaint(0, Color.RED); renderer.setSeriesStroke(0, new BasicStroke(2.0f)); plot.setRenderer(renderer); ``` 在這里,我們為圖表線設置了描邊和顏色。 `XYLineAndShapeRenderer`是將數據點與線連接和/或在每個數據點繪制形狀的對象。 渲染器通過`setRenderer()`方法設置。 ```java plot.setBackgroundPaint(Color.white); ``` `setBackgroundPaint()`設置繪圖區域的背景顏色。 ```java plot.setRangeGridlinesVisible(true); plot.setRangeGridlinePaint(Color.BLACK); plot.setDomainGridlinesVisible(true); plot.setDomainGridlinePaint(Color.BLACK); ``` 我們顯示網格線并將其涂成黑色。 ```java chart.getLegend().setFrame(BlockBorder.NONE); ``` 我們刪除圖例周圍的邊框。 ```java chart.setTitle(new TextTitle("Average Salary per Age", new Font("Serif", java.awt.Font.BOLD, 18) ) ); ``` 我們使用新字體創建圖表標題。 ![Line chart with JFreeChart](https://img.kancloud.cn/5c/3f/5c3f16fd935a0de458aa7e626639e1ea_632x411.jpg) 圖:折線圖 ## 帶有兩個序列的折線圖 在第二個示例中,我們創建具有兩個數據序列的折線圖。 `LineChartEx2.java` ```java package com.zetcode.linechartex2; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.SwingUtilities; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.block.BlockBorder; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.chart.title.TextTitle; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; public class LineChartEx2 extends JFrame { public LineChartEx2() { initUI(); } private void initUI() { XYDataset dataset = createDataset(); JFreeChart chart = createChart(dataset); ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15)); chartPanel.setBackground(Color.white); add(chartPanel); pack(); setTitle("Line chart"); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private XYDataset createDataset() { XYSeries series1 = new XYSeries("2014"); series1.add(18, 530); series1.add(20, 580); series1.add(25, 740); series1.add(30, 901); series1.add(40, 1300); series1.add(50, 2219); XYSeries series2 = new XYSeries("2016"); series2.add(18, 567); series2.add(20, 612); series2.add(25, 800); series2.add(30, 980); series2.add(40, 1210); series2.add(50, 2350); XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addSeries(series1); dataset.addSeries(series2); return dataset; } private JFreeChart createChart(final XYDataset dataset) { JFreeChart chart = ChartFactory.createXYLineChart( "Average salary per age", "Age", "Salary (€)", dataset, PlotOrientation.VERTICAL, true, true, false ); XYPlot plot = chart.getXYPlot(); XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(); renderer.setSeriesPaint(0, Color.RED); renderer.setSeriesStroke(0, new BasicStroke(2.0f)); renderer.setSeriesPaint(1, Color.BLUE); renderer.setSeriesStroke(1, new BasicStroke(2.0f)); plot.setRenderer(renderer); plot.setBackgroundPaint(Color.white); plot.setRangeGridlinesVisible(false); plot.setDomainGridlinesVisible(false); chart.getLegend().setFrame(BlockBorder.NONE); chart.setTitle(new TextTitle("Average Salary per Age", new Font("Serif", Font.BOLD, 18) ) ); return chart; } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { LineChartEx2 ex = new LineChartEx2(); ex.setVisible(true); }); } } ``` 該示例繪制具有兩個數據系列的折線圖。 ```java XYSeries series1 = new XYSeries("2014"); series1.add(18, 530); series1.add(20, 580); series1.add(25, 740); ... ``` 我們創建第一個系列; 其中包含 2014 年的數據。 ```java XYSeries series2 = new XYSeries("2016"); series2.add(18, 567); series2.add(20, 612); series2.add(25, 800); ... ``` 創建第二個數據系列; 其中包含 2016 年的數據。 ```java XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addSeries(series1); dataset.addSeries(series2); ``` 通過`addSeries()`方法將系列添加到`XYSeriesCollection`。 ```java renderer.setSeriesPaint(0, Color.RED); renderer.setSeriesStroke(0, new BasicStroke(2.0f)); renderer.setSeriesPaint(1, Color.BLUE); renderer.setSeriesStroke(1, new BasicStroke(2.0f)); ``` 一根線涂成紅色,另一根線涂成藍色。 ```java plot.setRangeGridlinesVisible(false); plot.setDomainGridlinesVisible(false); ``` 網格線已關閉。 ![Line chart with two series](https://img.kancloud.cn/28/1f/281fb9d0d7c20710897f5de2f9ae21f5_589x410.jpg) 圖:具有兩個系列的折線圖 ## 將圖表保存到圖像 `ChartUtilities`是 JFreeChart 的工具方法的集合。 它包括將圖表轉換為圖像格式并創建簡單的 HTML 圖像映射的方法。 `LineChartToPNGEx.java` ```java package com.zetcode.linecharttopngex; import java.io.File; import java.io.IOException; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; public class LineChartToPNGEx { public static void main(String[] args) throws IOException { XYSeries series1 = new XYSeries("2014"); series1.add(18, 530); series1.add(20, 580); series1.add(25, 740); series1.add(30, 901); series1.add(40, 1300); series1.add(50, 2219); XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addSeries(series1); JFreeChart chart = ChartFactory.createXYLineChart( "Average salary per age", "Age", "Salary (€)", dataset, PlotOrientation.VERTICAL, true, true, false ); ChartUtilities.saveChartAsPNG(new File("line_chart.png"), chart, 450, 400); } } ``` 該示例創建一個折線圖并將其保存到 PNG 文件中。 ```java ChartUtilities.saveChartAsPNG(new File("line_chart.png"), chart, 450, 400); ``` `ChartUtilities.saveChartAsPNG()`將圖表保存為 PNG 格式的指定文件。 ## JFreeChart 區域圖 區域圖以圖形方式顯示隨時間變化的定量數據。 在 JFreeChart 中使用`ChartFactory.createAreaChart()`方法創建面積圖。 `AreaChartEx.java` ```java package com.zetcode.areachartex; import java.awt.Color; import java.awt.Font; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.SwingUtilities; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.AreaRendererEndType; import org.jfree.chart.renderer.category.AreaRenderer; import org.jfree.chart.title.TextTitle; import org.jfree.data.category.CategoryDataset; import org.jfree.data.general.DatasetUtilities; public class AreaChartEx extends JFrame { public AreaChartEx() { initUI(); } private void initUI() { CategoryDataset dataset = createDataset(); JFreeChart chart = createChart(dataset); ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15)); chartPanel.setBackground(Color.white); add(chartPanel); pack(); setTitle("Area chart"); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private CategoryDataset createDataset() { double[][] data = new double[][]{ {82502, 84026, 85007, 86216, 85559, 84491, 87672, 88575, 89837, 90701} }; CategoryDataset dataset = DatasetUtilities.createCategoryDataset( new String[]{"Oil"}, new String[]{"2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013"}, data ); return dataset; } private JFreeChart createChart(CategoryDataset dataset) { JFreeChart chart = ChartFactory.createAreaChart( "Oil consumption", "Time", "Thousands bbl/day", dataset, PlotOrientation.VERTICAL, false, true, true ); CategoryPlot plot = (CategoryPlot) chart.getPlot(); plot.setForegroundAlpha(0.3f); AreaRenderer renderer = (AreaRenderer) plot.getRenderer(); renderer.setEndType(AreaRendererEndType.LEVEL); chart.setTitle(new TextTitle("Oil consumption", new Font("Serif", java.awt.Font.BOLD, 18)) ); return chart; } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { AreaChartEx ex = new AreaChartEx(); ex.setVisible(true); }); } } ``` 該示例顯示了一個區域圖,該區域圖按年份顯示了世界原油消耗量。 ```java double[][] data = new double[][]{ {82502, 84026, 85007, 86216, 85559, 84491, 87672, 88575, 89837, 90701} }; CategoryDataset dataset = DatasetUtilities.createCategoryDataset( new String[]{"Oil"}, new String[]{"2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013"}, data ); ``` 使用`DatasetUtilities.createCategoryDataset()`方法創建數據集。 與類別關聯的類別數據集值。 在我們的示例中,我們有數年與石油消耗有關。 ```java CategoryPlot plot = (CategoryPlot) chart.getPlot(); plot.setForegroundAlpha(0.3f); ``` 我們使用`setForegroundAlpha()`方法使圖表透明。 ```java AreaRenderer renderer = (AreaRenderer) plot.getRenderer(); renderer.setEndType(AreaRendererEndType.LEVEL); ``` 我們調整圖表的結尾。 ![Area chart](https://img.kancloud.cn/9e/f9/9ef9da5335b4722044febc72c9fba703_623x428.jpg) 圖:面積圖 ## JFreeChart 條形圖 條形圖顯示帶有矩形條的分組數據,其長度與它們所代表的值成比例。 條形圖可以垂直或水平繪制。 `BarChartEx.java` ```java package com.zetcode.barchartex; import java.awt.Color; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.SwingUtilities; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; public class BarChartEx extends JFrame { public BarChartEx() { initUI(); } private void initUI() { CategoryDataset dataset = createDataset(); JFreeChart chart = createChart(dataset); ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15)); chartPanel.setBackground(Color.white); add(chartPanel); pack(); setTitle("Bar chart"); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private CategoryDataset createDataset() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.setValue(46, "Gold medals", "USA"); dataset.setValue(38, "Gold medals", "China"); dataset.setValue(29, "Gold medals", "UK"); dataset.setValue(22, "Gold medals", "Russia"); dataset.setValue(13, "Gold medals", "South Korea"); dataset.setValue(11, "Gold medals", "Germany"); return dataset; } private JFreeChart createChart(CategoryDataset dataset) { JFreeChart barChart = ChartFactory.createBarChart( "Olympic gold medals in London", "", "Gold medals", dataset, PlotOrientation.VERTICAL, false, true, false); return barChart; } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { BarChartEx ex = new BarChartEx(); ex.setVisible(true); }); } } ``` 該代碼示例使用條形圖顯示了 2012 年倫敦每個國家/地區的奧運金牌數量。 ```java DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.setValue(46, "Gold medals", "USA"); dataset.setValue(38, "Gold medals", "China"); dataset.setValue(29, "Gold medals", "UK"); dataset.setValue(22, "Gold medals", "Russia"); dataset.setValue(13, "Gold medals", "South Korea"); dataset.setValue(11, "Gold medals", "Germany"); ``` 我們使用`DefaultCategoryDataset`創建數據集。 ```java JFreeChart barChart = ChartFactory.createBarChart( "Olympic gold medals in London", "", "Gold medals", dataset, PlotOrientation.VERTICAL, false, true, false); ``` 使用`ChartFactory.createBarChart()`方法創建條形圖。 ![Bar chart](https://img.kancloud.cn/c1/cd/c1cd9349bedcfe17256f580f6793fc03_584x387.jpg) 圖:條形圖 ## JFreeChart 餅圖 餅圖是一種圓圖,分為多個切片以說明數值比例。 使用 JFreeChart 中的`ChartFactory.createPieChart()`方法創建一個餅圖。 `PieChartEx.java` ```java package com.zetcode.piechartex; import java.awt.Color; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.SwingUtilities; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.data.general.DefaultPieDataset; public class PieChartEx extends JFrame { public PieChartEx() { initUI(); } private void initUI() { DefaultPieDataset dataset = createDataset(); JFreeChart chart = createChart(dataset); ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15)); chartPanel.setBackground(Color.white); add(chartPanel); pack(); setTitle("Pie chart"); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private DefaultPieDataset createDataset() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("Apache", 52); dataset.setValue("Nginx", 31); dataset.setValue("IIS", 12); dataset.setValue("LiteSpeed", 2); dataset.setValue("Google server", 1); dataset.setValue("Others", 2); return dataset; } private JFreeChart createChart(DefaultPieDataset dataset) { JFreeChart barChart = ChartFactory.createPieChart( "Web servers market share", dataset, false, true, false); return barChart; } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { PieChartEx ex = new PieChartEx(); ex.setVisible(true); }); } } ``` 該示例使用餅圖來顯示 Web 服務器的市場份額。 ```java DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("Apache", 52); dataset.setValue("Nginx", 31); dataset.setValue("IIS", 12); ... ``` `DefaultPieDataset`用于創建數據集。 ```java JFreeChart barChart = ChartFactory.createPieChart( "Web servers market share", dataset, false, true, false); ``` 使用`ChartFactory.createPieChart()`方法創建一個新的餅圖。 ## Servlet 中的 JFreeChart 在以下示例中,我們使用 Java servlet 創建餅圖。 該圖表在 Web 瀏覽器中呈現。 `DoChart.java` ```java package com.zetcode.servletchart; import java.awt.BasicStroke; import java.awt.Color; import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.data.general.DefaultPieDataset; @WebServlet(name = "DoChart", urlPatterns = {"/DoChart"}) public class DoChart extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/png"); OutputStream outputStream = response.getOutputStream(); JFreeChart chart = getChart(); int width = 500; int height = 350; ChartUtilities.writeChartAsPNG(outputStream, chart, width, height); } public JFreeChart getChart() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("Croatia", 22); dataset.setValue("Bohemia", 34); dataset.setValue("Bulgaria", 18); dataset.setValue("Spain", 5); dataset.setValue("Others", 21); JFreeChart chart = ChartFactory.createPieChart("Popular destinations", dataset, true, false, false); chart.setBorderVisible(false); return chart; } } ``` `DoChart` Servlet 創建一個餅圖并將其發送到客戶端。 ```java response.setContentType("image/png"); ``` `setContentType()`將內容設置為 PNG 圖像。 ```java OutputStream outputStream = response.getOutputStream(); ``` 使用`getOutputStream()`方法,我們得到一個輸出流。 這是我們向其發送數據的隧道。 ```java ChartUtilities.writeChartAsPNG(outputStream, chart, width, height); ``` `ChartUtilities.writeChartAsPNG()`將二進制數據寫入輸出字符串。 ![A pie chart in a browser](https://img.kancloud.cn/28/8c/288ca5679bbfc027b0878086900d229d_592x413.jpg) 圖:瀏覽器中的餅圖 ## 顯示來自 MySQL 數據庫的數據 `JDBCCategoryDataset`是對數據庫 JDBC 結果集的`CategoryDataset`實現。 通過使用字符串 SQL 查詢調用`executeQuery()`來填充數據集。 `medals.sql` ```java DROP TABLE IF EXISTS GoldMedalsLondon; CREATE TABLE GoldMedalsLondon ( Id int(11) NOT NULL AUTO_INCREMENT, Country text, Medals int(11) DEFAULT NULL, PRIMARY KEY (Id) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1; LOCK TABLES GoldMedalsLondon WRITE; INSERT INTO GoldMedalsLondon VALUES (1,'USA',46),(2,'China',38),(3,'UK',29), (4,'Russia',22),(5,'South Korea',13),(6,'Germany',11); UNLOCK TABLES; ``` 我們將這些數據存儲在 MySQL 數據庫表中。 ```java mysql> SELECT * FROM GoldMedalsLondon; +----+-------------+--------+ | Id | Country | Medals | +----+-------------+--------+ | 1 | USA | 46 | | 2 | China | 38 | | 3 | UK | 29 | | 4 | Russia | 22 | | 5 | South Korea | 13 | | 6 | Germany | 11 | +----+-------------+--------+ 6 rows in set (0.00 sec) ``` 我們使用`mysql`工具顯示數據。 `MySQLChartEx.java` ```java package com.zetcode.mysqlchartex; import java.io.File; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.jdbc.JDBCCategoryDataset; public class MySQLChartEx { private static JDBCCategoryDataset dataset; public static void main(String[] args) throws IOException, SQLException { Connection con = null; String url = "jdbc:mysql://localhost:3306/testdb"; String user = "testuser"; String password = "test623"; try { con = DriverManager.getConnection(url, user, password); dataset = new JDBCCategoryDataset(con); dataset.executeQuery("SELECT Country, Medals FROM GoldMedalsLondon"); } finally { if (con != null) { con.close(); } } JFreeChart barChart = ChartFactory.createBarChart( "Olympic Gold medals in London", "", "Gold medals", dataset, PlotOrientation.VERTICAL, false, true, false); ChartUtilities.saveChartAsPNG(new File("medals.png"), barChart, 450, 400); } } ``` 該示例從 MySQL 表檢索數據,創建條形圖,然后將其保存到 PNG 圖像中。 ```java con = DriverManager.getConnection(url, user, password); dataset = new JDBCCategoryDataset(con); ``` `JDBCCategoryDataset`已創建; 它以數據庫連接為參數。 ```java dataset.executeQuery("SELECT Country, Medals FROM GoldMedalsLondon"); ``` `executeQuery()`通過針對現有數據庫連接執行提供的查詢來填充數據集。 SQL 查詢必須至少返回兩列。 第一列是類別名稱,其余列是值。 ```java JFreeChart barChart = ChartFactory.createBarChart( "Olympic Gold medals in London", "", "Gold medals", dataset, PlotOrientation.VERTICAL, false, true, false); ``` 條形圖已創建。 ```java ChartUtilities.saveChartAsPNG(new File("medals.png"), barChart, 450, 400); ``` 條形圖通過`ChartUtilities.saveChartAsPNG()`方法保存到 PNG 文件中。 本教程專門針對 JFreeChart 庫。 您可能也對相關教程感興趣: [Java Swing 教程](/tutorials/javaswingtutorial/), [Java 2D 教程](/gfx/java2d/), [Java PDFBox 教程](/java/pdfbox/)或 [Java 教程](/lang/java/)。 也可以[在 JavaFX 中創建圖表](/gui/javafx/charts)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看