`

JFreeChart支持的图表类型总结

 
阅读更多

JFreeChart支持的图表类型总结

一般的创建图表的过程为: 

1. 从数据库里读取数据 

2. 将数据保存到图表对应的数据集对象中 

3. 创建坐标轴对象 

4. 创建Renderer对象 

5. 创建Plot对象 

6. 创建JfreeChart对象 

7. 生成图片文件(或者二进制流) 

JFreeChart支持的图表类型总结 
图表类型 工厂类方法 数据集类型 备注 
柱状图 createBarChart CategoryDataset   
柱状图3D createBarChart3D CategoryDataset   
饼图 createPieChart PieDataset   
饼图3D createPieChart3D PieDataset   
线图 createLineChart CategoryDataset   
线图3D createLineChart3D CategoryDataset   
复合饼图 createMultiplePieChart CategoryDataset 需要设置TableOrder 
复合饼图3D createMultiplePieChart3D CategoryDataset   
环形图 createRingChart PieDataset   
瀑布图 createWaterfallChart CategoryDataset 柱图特殊形式 
面积图 createAreaChart CategoryDataset   
散点图 createScatterPlot XYSeriesCollection   
组织图 createHistogram XYSeriesCollection   
数据点阶梯图 createXYStepChart XYSeriesCollection   
堆积面积图 createStackedAreaChart CategoryDataset   
堆积柱状图 createStackedBarChart CategoryDataset   
堆积柱状图3D createStackedBarChart3D CategoryDataset   
数据点线图 createXYLineChart XYSeriesCollection   
数据点面积图 createXYAreaChart XYSeriesCollection   
数据点阶梯面积图 createXYStepAreaChart XYSeriesCollection   
堆积数据点面积图 createStackedXYAreaChart TableXYDataset   
时序图 createTimeSeriesChart XYDataset   
晶片图 createWaferMapChart WaferMapDataset   
WindPlot createWindPlot WindDataset   
极线图 createPolarChart XYDataset   
气泡图 createBubbleChart XYZDataset   
BoxAndWhiskerChart createBoxAndWhiskerChart BoxAndWhiskerXYDataset   
烛台图 createCandlestickChart OHLCDataset   
股价图 createHighLowChart OHLCDataset 2种 时间线差别 
甘特图 createGanttChart IntervalCategoryDataset   
数据点柱状图 createXYBarChart IntervalXYDataset   




import java.util.Calendar; 
import java.util.Date; 
import org.jfree.chart.*; 
import org.jfree.data.category.CategoryDataset; 
import org.jfree.data.category.DefaultCategoryDataset; 
import org.jfree.data.category.IntervalCategoryDataset; 
import org.jfree.data.gantt.Task; 
import org.jfree.data.gantt.TaskSeries; 
import org.jfree.data.gantt.TaskSeriesCollection; 
import org.jfree.data.general.DefaultPieDataset; 
import org.jfree.data.general.PieDataset; 
import org.jfree.data.time.SimpleTimePeriod; 
import org.jfree.data.xy.DefaultOHLCDataset; 
import org.jfree.data.xy.DefaultTableXYDataset; 
import org.jfree.data.xy.DefaultXYZDataset; 
import org.jfree.data.xy.OHLCDataItem; 
import org.jfree.data.xy.XYSeries; 
import org.jfree.data.xy.XYSeriesCollection; 
/** *//** 
* @author xum @ 2006/09/14 
* JFreeChart 数据集样例 

* TODO To change the template for this generated type comment go to 
* Window - Preferences - Java - Code Style - Code Templates 
*/ 
public class ChartDataSet ...{ 

private static final String series1 = "series1"; 
private static final String series2 = "series2"; 
private static final String series3 = "series3"; 

private static final String category1 = "category1"; 
private static final String category2 = "category2"; 
private static final String category3 = "category3"; 
private static final String category4 = "category4"; 
private static final String category5 = "category5"; 

/** *//** 
* CategoryDataset 
* 支持图表类型 
* BarChart 
* BarChart3D 
* LineChart 
* LintChart3D 
* AreaChart 
* WaterfallChart 
* MultiplePieChart 
* MultiplePieChart3D 
* StackedBarChart 
* StackedBarChart3D 
* StackedAreaChart 
* @return CategoryDataset 
*/ 
public static CategoryDataset createCategoryDataset()...{ 
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset(); 

categoryDataset.addValue(2.0, series1, category1); 
categoryDataset.addValue(4.0, series1, category2); 
categoryDataset.addValue(3.0, series1, category3); 
categoryDataset.addValue(7.0, series1, category4); 
categoryDataset.addValue(5.0, series1, category5); 

categoryDataset.addValue(5.0, series2, category1); 
categoryDataset.addValue(9.0, series2, category2); 
categoryDataset.addValue(6.0, series2, category3); 
categoryDataset.addValue(5.0, series2, category4); 
categoryDataset.addValue(2.0, series2, category5); 

categoryDataset.addValue(6.5, series3, category1); 
categoryDataset.addValue(7.5, series3, category2); 
categoryDataset.addValue(4.0, series3, category3); 
categoryDataset.addValue(8.0, series3, category4); 
categoryDataset.addValue(9.0, series3, category5); 

return categoryDataset; 


/** *//** 
* XYSeriesCollection 
* 支持图表类型 
* PolarChart 
* XYBarChart 
* XYLineChart 
* XYStepAreaChart 
* XYAreaChart 
* XYStepChart 
* Histogram 
* ScatterPlot 
* @return XYSeriesCollection 
*/ 
public static XYSeriesCollection createXYSeriesCollection()...{ 
XYSeriesCollection dataset = new XYSeriesCollection(); 

XYSeries xyseries1 = new XYSeries(series1); 
XYSeries xyseries2 = new XYSeries(series2); 
XYSeries xyseries3 = new XYSeries(series3); 

xyseries1.add(2.5, 6.0); 
xyseries1.add(4.0, 3.5); 
xyseries1.add(7.5, 5.5); 
xyseries1.add(12.0, 7.0); 
xyseries1.add(9.5, 10.0); 

xyseries2.add(4.5, 11.0); 
xyseries2.add(6.0, 3.5); 
xyseries2.add(2.5, 5.0); 
xyseries2.add(3.5, 6.5); 
xyseries2.add(5.0, 7.0); 

xyseries3.add(7.0, 12.0); 
xyseries3.add(4.5, 8.0); 
xyseries3.add(6.0, 4.5); 
xyseries3.add(9.5, 11.0); 
xyseries3.add(3.0, 6.0); 

dataset.addSeries(xyseries1); 
dataset.addSeries(xyseries2); 
dataset.addSeries(xyseries3); 

return dataset; 


/** *//** 
* DefaultTableXYDataset 
* 支持图表类型 
* StackedXYAreaChart 
* @return DefaultTableXYDataset 
*/ 
public static DefaultTableXYDataset createDefaultTableXYDataset()...{ 
DefaultTableXYDataset dataset = new DefaultTableXYDataset(); 

XYSeries xyseries1 = new XYSeries(series1); 
XYSeries xyseries2 = new XYSeries(series2); 
XYSeries xyseries3 = new XYSeries(series3); 

xyseries1.add(2.5, 6.0); 
xyseries1.add(4.0, 3.5); 
xyseries1.add(7.5, 5.5); 
xyseries1.add(12.0, 7.0); 
xyseries1.add(9.5, 10.0); 

xyseries2.add(4.5, 11.0); 
xyseries2.add(6.0, 3.5); 
xyseries2.add(2.5, 5.0); 
xyseries2.add(3.5, 6.5); 
xyseries2.add(5.0, 7.0); 

xyseries3.add(7.0, 12.0); 
xyseries3.add(4.5, 8.0); 
xyseries3.add(6.0, 4.5); 
xyseries3.add(9.5, 11.0); 
xyseries3.add(3.0, 6.0); 

dataset.addSeries(xyseries1); 
dataset.addSeries(xyseries2); 
dataset.addSeries(xyseries3); 

return dataset; 


/** *//** 
* PieDataset 
* 支持图表类型 
* PieChart 
* PieChart3D 
* RingChart 
* @return PieDataset 
*/ 
public static PieDataset createPieDataset()...{ 
DefaultPieDataset dataset = new DefaultPieDataset(); 

dataset.setValue(category1, 12.0); 
dataset.setValue(category2, 2.0); 
dataset.setValue(category3, 4.0); 
dataset.setValue(category4, 20.0); 
dataset.setValue(category5, 7.0); 

return dataset; 


/** *//** 
* IntervalCategoryDataset 
* 支持图表类型 
* GanttChart 
* @return IntervalCategoryDataset 
*/ 
public static IntervalCategoryDataset createGanttDataset()...{ 
TaskSeriesCollection taskSeriesCollection = new TaskSeriesCollection(); 

TaskSeries s1 = new TaskSeries("Scheduled"); 
        s1.add(new Task("Write Proposal", 
               new SimpleTimePeriod(date(1, Calendar.APRIL, 2001), 
                                    date(5, Calendar.APRIL, 2001)))); 
        s1.add(new Task("Obtain Approval", 
               new SimpleTimePeriod(date(9, Calendar.APRIL, 2001), 
                                    date(9, Calendar.APRIL, 2001)))); 
        s1.add(new Task("Requirements Analysis", 
               new SimpleTimePeriod(date(10, Calendar.APRIL, 2001), 
                                    date(5, Calendar.MAY, 2001)))); 
        s1.add(new Task("Design Phase", 
               new SimpleTimePeriod(date(6, Calendar.MAY, 2001), 
                                    date(30, Calendar.MAY, 2001)))); 
        s1.add(new Task("Design Signoff", 
               new SimpleTimePeriod(date(2, Calendar.JUNE, 2001), 
                                    date(2, Calendar.JUNE, 2001)))); 
        s1.add(new Task("Alpha Implementation", 
               new SimpleTimePeriod(date(3, Calendar.JUNE, 2001), 
                                    date(31, Calendar.JULY, 2001)))); 
        s1.add(new Task("Design Review", 
               new SimpleTimePeriod(date(1, Calendar.AUGUST, 2001), 
                                    date(8, Calendar.AUGUST, 2001)))); 
        s1.add(new Task("Revised Design Signoff", 
               new SimpleTimePeriod(date(10, Calendar.AUGUST, 2001), 
                                    date(10, Calendar.AUGUST, 2001)))); 
        s1.add(new Task("Beta Implementation", 
               new SimpleTimePeriod(date(12, Calendar.AUGUST, 2001), 
                                    date(12, Calendar.SEPTEMBER, 2001)))); 
        s1.add(new Task("Testing", 
               new SimpleTimePeriod(date(13, Calendar.SEPTEMBER, 2001), 
                                    date(31, Calendar.OCTOBER, 2001)))); 
        s1.add(new Task("Final Implementation", 
               new SimpleTimePeriod(date(1, Calendar.NOVEMBER, 2001), 
                                    date(15, Calendar.NOVEMBER, 2001)))); 
        s1.add(new Task("Signoff", 
               new SimpleTimePeriod(date(28, Calendar.NOVEMBER, 2001), 
                                    date(30, Calendar.NOVEMBER, 2001)))); 
        TaskSeries s2 = new TaskSeries("Actual"); 
        s2.add(new Task("Write Proposal", 
               new SimpleTimePeriod(date(1, Calendar.APRIL, 2001), 
                                    date(5, Calendar.APRIL, 2001)))); 
        s2.add(new Task("Obtain Approval", 
               new SimpleTimePeriod(date(9, Calendar.APRIL, 2001), 
                                    date(9, Calendar.APRIL, 2001)))); 
        s2.add(new Task("Requirements Analysis", 
               new SimpleTimePeriod(date(10, Calendar.APRIL, 2001), 
                                    date(15, Calendar.MAY, 2001)))); 
        s2.add(new Task("Design Phase", 
               new SimpleTimePeriod(date(15, Calendar.MAY, 2001), 
                                    date(17, Calendar.JUNE, 2001)))); 
        s2.add(new Task("Design Signoff", 
               new SimpleTimePeriod(date(30, Calendar.JUNE, 2001), 
                                    date(30, Calendar.JUNE, 2001)))); 
        s2.add(new Task("Alpha Implementation", 
               new SimpleTimePeriod(date(1, Calendar.JULY, 2001), 
                                    date(12, Calendar.SEPTEMBER, 2001)))); 
        s2.add(new Task("Design Review", 
               new SimpleTimePeriod(date(12, Calendar.SEPTEMBER, 2001), 
                                    date(22, Calendar.SEPTEMBER, 2001)))); 
        s2.add(new Task("Revised Design Signoff", 
               new SimpleTimePeriod(date(25, Calendar.SEPTEMBER, 2001), 
                                    date(27, Calendar.SEPTEMBER, 2001)))); 
        s2.add(new Task("Beta Implementation", 
               new SimpleTimePeriod(date(27, Calendar.SEPTEMBER, 2001), 
                                    date(30, Calendar.OCTOBER, 2001)))); 
        s2.add(new Task("Testing", 
               new SimpleTimePeriod(date(31, Calendar.OCTOBER, 2001), 
                                    date(17, Calendar.NOVEMBER, 2001)))); 
        s2.add(new Task("Final Implementation", 
               new SimpleTimePeriod(date(18, Calendar.NOVEMBER, 2001), 
                                    date(5, Calendar.DECEMBER, 2001)))); 
        s2.add(new Task("Signoff", 
               new SimpleTimePeriod(date(10, Calendar.DECEMBER, 2001), 
                                    date(11, Calendar.DECEMBER, 2001)))); 
        taskSeriesCollection.add(s1); 
        taskSeriesCollection.add(s2); 
        
return taskSeriesCollection; 


/** *//** 
* DefaultOHLCDataset 
* 支持的图表类型 
* HighLowChart 
* CandlestickChart 
* @return DefaultOHLCDataset 
*/ 
public static DefaultOHLCDataset createDefaultOHLCDataset()...{ 

OHLCDataItem[] data = new OHLCDataItem[10]; 

data[0] = new OHLCDataItem(new Date(11L), 2.0, 4.0, 1.0, 3.0, 100.0); 
        data[1] = new OHLCDataItem(new Date(22L), 4.0, 9.0, 2.0, 5.0, 120.0); 
        data[2] = new OHLCDataItem(new Date(33L), 3.0, 7.0, 3.0, 6.0, 140.0); 
        data[3] = new OHLCDataItem(new Date(25L), 2.0, 4.0, 1.0, 3.0, 100.0); 
        data[4] = new OHLCDataItem(new Date(47L), 4.0, 9.0, 2.0, 5.0, 120.0); 
        data[5] = new OHLCDataItem(new Date(58L), 3.0, 7.0, 3.0, 6.0, 140.0); 
        data[6] = new OHLCDataItem(new Date(60L), 2.0, 4.0, 1.0, 3.0, 100.0); 
        data[7] = new OHLCDataItem(new Date(44L), 4.0, 9.0, 2.0, 5.0, 120.0); 
        data[8] = new OHLCDataItem(new Date(38L), 3.0, 7.0, 3.0, 6.0, 140.0); 
        data[9] = new OHLCDataItem(new Date(40L), 3.0, 7.0, 3.0, 6.0, 140.0); 

DefaultOHLCDataset defaultHighLowDataset = new DefaultOHLCDataset("OHLCDataset", data); 
     
     return defaultHighLowDataset; 


/** *//** 
* DefaultXYZDataset 
* 支持图表类型 
* BubbleChart 
* @return DefaultXYZDataset 
*/ 
public static DefaultXYZDataset createDefaultXYZDataset()...{ 
DefaultXYZDataset defaultXYZDataset = new DefaultXYZDataset(); 

double[] x1 = new double[] ...{1.0, 2.0, 3.0}; 
        double[] y1 = new double[] ...{4.0, 5.0, 6.0}; 
        double[] z1 = new double[] ...{7.0, 8.0, 9.0}; 
        double[][] data1 = new double[][] ...{x1, y1, z1}; 
        defaultXYZDataset.addSeries(series1, data1); 
        
        double[] x2 = new double[] ...{1.0, 2.0, 3.0}; 
        double[] y2 = new double[] ...{4.0, 5.0, 6.0}; 
        double[] z2 = new double[] ...{7.0, 8.0, 9.0}; 
        double[][] data2 = new double[][] ...{x2, y2, z2}; 
        defaultXYZDataset.addSeries(series1, data2); 
        
return defaultXYZDataset; 


    private static Date date(int day, int month, int year) ...{ 
        Calendar calendar = Calendar.getInstance(); 
        calendar.set(year, month, day); 
        Date result = calendar.getTime(); 
        return result; 
    } 

JSP应用示例 

<%@ page contentType="text/html; charset=gb2312"%> 
<%@ page import="java.io.*"%> 
<jsp:useBean id="FreeChart" scope="session" class="com.function.FreeChart"/> 
<head> 
<meta http-equiv="Pragma" content="no-cache"> 
<meta http-equiv="Cache-Control" content="no-cache"> 
<meta http-equiv="Expires" content="0"> 
</head> 
<link rel="stylesheet" type="text/css" href="/defineOA/css/default.css"> 
<% 
//初始化 
//考虑图形中是否直接链接到统计查询表格 
String strTimeList=""; 
String strMultipleTimeList=""; 
String strCategoryList=""; 
String strData=""; 
String strMultipleData=""; 

strTimeList="2005-05-01 00:00:00,2005-05-02 05:00:00,2005-05-03 10:00:00,2005-05-04 15:00:00,2005-05-05 20:00:00"; 
strMultipleTimeList="2005-05-01 00:00:00,2005-05-02 05:00:00,2005-05-03 10:00:00,2005-05-04 15:00:00,2005-05-05 20:00:00"; 
strCategoryList="JSP工作量,Servlet工作量,Bean工作量"; 
strData="1,2,3,4,5"; 
strMultipleData="1,2,3,4,5#2,3,4,5,6#3,4,5,6,7"; 

FreeChart.createDataset(strMultipleTimeList,strCategoryList,strMultipleData); 
FreeChart.createDataset(strTimeList,strData); 
FreeChart.setRender(true); 
FreeChart.setTimeAxis("Hour"); 
if(request.getParameter("ChartType")==null) 

FreeChart.createChart(1,"默认统计图","时间轴","统计值轴"); 

else 

FreeChart.createChart(Integer.parseInt(request.getParameter("ChartType")),"统计图","时间轴","统计值轴"); 

FreeChart.createImageFile(800,400,session); 

response.setHeader("Pragma","No-cache"); 
response.setDateHeader("Expires",0); 
response.setHeader("Cache-Control","no-cache"); 
%> 
<% 
for(int iIndex=0;iIndex<FreeChart.vChartTypeArray.length;iIndex++) 

%> 
<input type=button class="GeneralButton" value="<%=FreeChart.vChartTypeArray[iIndex]%>" onclick="window.location=´/defineOA/test/chart.jsp?ChartType=<%=iIndex+1%>´;"> 
<% 

%> 
<br> 
<fieldset> 
<legend>图表</legend> 
<!--class="GeneralImage"--> 
<br> 
<center> 
<table> 
<tr> 
    <td style="border:1 solid #3399CC;"><img src="<%=FreeChart.getImageFile()%>"></td> 
</tr> 
</table> 
</center> 
<br> 
</fieldset> 

 

 

 

 

 

分享到:
评论

相关推荐

    Jfreechart打造专业图表

    2. 创建所需的图表类型(如ChartFactory.createBarChart())。 3. 设置图表的各种属性,如标题、轴标签、数据集等。 4. 将图表渲染到指定的图形上下文(如Graphics2D),或者保存为图像文件。 5. 对于交互式应用,可...

    jfreechart个人心得总结

    JFreeChart 支持多种图表类型,包括: 1. 饼图(Pie Chart):显示部分与整体的关系。 2. 柱状图(Bar Chart):比较不同类别之间的数值差异。 3. 线图(Line Chart):展示数据随时间变化的趋势。 4. 散点图...

    jfreechart java图表开发库

    总结来说,JFreeChart是Java开发中不可或缺的图表库,它提供丰富的图表类型和高度的定制化能力,使得数据可视化变得简单而高效。无论你是开发报表系统还是构建数据驱动的应用,JFreeChart都能成为你的得力助手。

    JFreeChart Java图表组件 v1.0.12

    6. **事件监听**:JFreeChart支持图表的鼠标点击事件,使得用户能够与图表进行交互,比如弹出详细信息或者触发其他操作。 ### 使用JFreeChart的步骤 1. **添加依赖**:在项目中引入JFreeChart的jar包或Maven/...

    JFreeChart 典型图表生成及属性设置示例

    `CategoryDataset`是JFreeChart中一种非常基础的数据集类型,适用于柱状图、堆叠柱状图、折线图等多种图表类型。示例代码中,我们首先创建了一个`DefaultCategoryDataset`实例,然后向其中添加数据。例如: ```java...

    用jfreechart来生成统计图表.doc

    4. 雷达图、折线图、散点图等多种图表类型。 5. 复杂的数据可视化,如3D图表和时间序列数据。 6. 支持导出图表为 PNG、JPEG、PDF、SVG 等多种格式。 对于 web 应用,jFreeChart 还可以通过 Servlet 将图表直接输出...

    在Java Web中使用JFreechart创建图表信息(主要用于统计方面)

    2. **创建图表**:使用JFreeChart类的工厂方法,根据需要创建不同类型的图表。例如,`ChartFactory.createBarChart()`用于创建柱状图,`ChartFactory.createLineChart()`用于创建折线图。 3. **设置数据**:使用`...

    在Struts中用JFreeChart生成图表

    在Struts项目的Java类中,需要引入JFreeChart相关的包以支持图表的生成。以下是一些常用的包: ```java import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServletRequest; import org.jfree....

    JFreeChart图表制作工具

    JFreeChart支持多种数据源,包括ArraySeriesCollection、DefaultCategoryDataset、DefaultPieDataset等。开发者可以使用这些数据模型将数据组织起来,然后生成对应的图表。 5. **输出方式** 生成的图表可以导出为...

    基于jfreeChart的动态图表

    jfreeChart是一个开源的Java图表库,它提供了丰富的API用于创建各种类型的图表,如折线图、柱状图、饼图等。它支持复杂的配置选项,并且能够导出为多种格式,如PNG、PDF等。由于其功能强大且易于使用,jfreeChart...

    jfreechart的一个小总结

    这些类可以根据图表类型选择相应的实现。 对于时序图,JFreeChart 提供了 `TimePeriodValues` 和 `TimeSeries` 等类来处理时间序列数据。在示例代码中,`TimePeriodValuesCollection` 用于收集多个 `...

    JfreeChart学习总结

    JFreeChart是一款强大的Java图形库,它提供了丰富的图表类型,如饼图、柱状图、曲线图、散点图、时间序列图、甘特图、风力图、仪表图等,满足了各种数据可视化的需要。它不仅支持二维和三维的图形展示,还能够将图表...

    JFreechart图表设计教程与实例

    该组件不仅支持常见的图表类型,如条形图、饼图、折线图等,还能绘制更为专业的时序图、甘特图等。 ##### 24.1.2 JFreeChart的下载与使用 JFreeChart是一个开源项目,可以从官方网站...

    JAVA用POI从Excel读取数据进行相关统计JFreeChart绘制图表.pdf

    通过`ChartFactory`创建所需的图表类型,如条形图、折线图或散点图,将`Dataset`传递给`createXXXChart`方法。 6. **处理中文显示** 要解决JFreeChart中中文显示的问题,可能需要设置` RenderingHints`以支持中文...

    使用JFreeChart来创建基于web的图表

    1. **广泛的图表类型支持**:JFreeChart支持多种图表类型,包括但不限于折线图、条形图、饼图、散点图、时间序列图等。 2. **高度可定制性**:用户可以根据需要对图表的颜色、样式、布局等进行个性化定制。 3. **...

    jFreeChart学习总结

    - **复合图**:结合多种图表类型以更全面地展示数据。 - **帕累托图**:用于识别造成最大影响的关键因素。 - **甘特图**:常用于项目管理,展示任务的进度和持续时间。 - **风向图**、**仪表盘图**和**符号图**:...

    JFreechart图表实例.doc

    无论是简单的柱状图还是更复杂的图表类型,JFreeChart 都能提供简单易用的 API 来实现。此外,由于 JFreeChart 的灵活性和扩展性,开发者可以根据自己的需求定制出更加符合业务逻辑的图表,从而极大地提高了应用程序...

    JFreeChart资源文件

    - **动态更新**:JFreeChart支持图表的实时更新,对于需要动态展示数据变化的应用非常适用。 - **易于集成**:由于JFreeChart是纯Java实现,它可以方便地集成到Java Web应用(通过Servlet或JSP)、Swing桌面应用,...

    JFreeChart图表制作

    它支持多种图表类型,包括饼图、柱状图、折线图、散点图、时序图、甘特图等。JFreeChart 的优势在于其灵活性和易用性,不仅可以在 Swing 应用程序中使用,还能集成到 Web 应用程序中,如 Struts2、Spring 和 ...

Global site tag (gtag.js) - Google Analytics