Ⅰ java中使用jfreechart做柱狀圖,在jsp中顯示有問題,
jfreechart中顯示柱狀圖到jsp頁面:
package com.test.jfreechart;
import java.awt.Font;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
public class JFreeChartTest2 extends ApplicationFrame
{
public JFreeChartTest2(String title)
{
super(title);
this.setContentPane(createPanel()); //構造函數中自動創建Java的panel面板
}
public static CategoryDataset createDataset() //創建滑旁柱狀圖數據集
{
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.setValue(10,"a","管理人員");
dataset.setValue(20,"b","市場人員");
dataset.setValue(40,"c","開發人員");
dataset.setValue(15,"d","其他人員");
return dataset;
}
public static JFreeChart createChart(CategoryDataset dataset) //用數據集創建一個圖表
{
JFreeChart chart=ChartFactory.createBarChart("hi", "人員分布",
"人卜亂員數量", dataset, PlotOrientation.VERTICAL, true, true, false); //創建一個JFreeChart
chart.setTitle(new TextTitle("某公司組織結信弊橡構圖",new Font("宋體",Font.BOLD+Font.ITALIC,20)));//可以重新設置標題,替換「hi」標題
CategoryPlot plot=(CategoryPlot)chart.getPlot();//獲得圖標中間部分,即plot
CategoryAxis categoryAxis=plot.getDomainAxis();//獲得橫坐標
categoryAxis.setLabelFont(new Font("微軟雅黑",Font.BOLD,12));//設置橫坐標字體
return chart;
}
public static JPanel createPanel()
{
JFreeChart chart =createChart(createDataset());
return new ChartPanel(chart); //將chart對象放入Panel面板中去,ChartPanel類已繼承Jpanel
}
public static void main(String[] args)
{
JFreeChartTest2 chart=new JFreeChartTest2("某公司組織結構圖");
chart.pack();//以合適的大小顯示
chart.setVisible(true);
}
}
運行結果:
Ⅱ java報表怎麼做
用我現在用的finereport來和題主說下餅圖吧,它也是web報表工具。
打開報表,設置百分比數據模板
符合餅圖和復合條餅圖只支持百分比的系列分隔方式,因此我們計算每個地區的應付金額所佔比例是多少,隱藏B列,在C1中輸入佔比,C2中輸入公式:=B2/SUM(B2[!0]),B2[!0]是B2擴展出來的所有單元格,根據情況設置單元格樣式等操作。
下面以製作符合餅圖為例,選中圖表,勾線圖表屬性表-樣式>系列中的第二繪圖區,將第二繪圖區小於百分比的數據改為10,默認為5,表示第二繪圖區包含所有小於該百分比的值為:如下圖:
根據情況可設置系列標簽樣式,勾選圖表屬性表-樣式>標簽中的標簽,選中值,設置格式,百分比保留兩位小數。
修改圖表數據
修改圖表屬性表-數據>圖例項值為C2單元格,復合餅圖則可設置完成。
預覽與保存
保存模板,點擊分頁預覽,即可看到效果。
Ⅲ java操作word中的excel(對應的是圖表,如柱狀圖)
我.net中也遇到了相同的問題:你可以先看一下下面代碼,應該大部分你能用到,只是chart屬性可能有點問題,之前嘗試成功過,但是由於我不小心刪除了一些系統文件里的內容,就有些運行不起來了
我是先循環的word中的shape
foreach (Microsoft.Office.Interop.Word.Shape shape in docFile.Shapes)
{
if(shape.Name=="Chart_圖表")
{
shape.Chart.ChartData.Activate();
Microsoft.Office.Interop.Excel.Workbook wb = (Microsoft.Office.Interop.Excel.Workbook)shape.Chart.ChartData.Workbook;
Microsoft.Office.Interop.Excel.Worksheet wSh = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[1];
//然後添加新數據
for (int r = 0; r < tempdt.Rows.Count; r++)
{
for (int k = 0; k < tempdt.Columns.Count; k++)
{
Microsoft.Office.Interop.Excel.Range Rng1 = wSh.Cells[r + 2, k + 1] as Microsoft.Office.Interop.Excel.Range;
Rng1.Value = tempdt.Rows[r][k];
}
}
wb.Application.ScreenUpdating = true;
wb.Close(Type.Missing, Type.Missing, Type.Missing);
chart.Refresh();
shape.Chart.Refresh();
}
}
Ⅳ 如何在JSP網頁中生成動態圖表
JSP頁面中嵌入動態圖表的兩種方法 :在JSP頁面中插入Applet小程序 ;通過JavaBean動態生成圖像。
JSP是一種廣泛應用的網頁設計技術 ,它是一種HTML和Java腳本寬喊混合的編程技術 ,它結合了HTML的靜態特性和Java語言的動態能力 ,因此用它進行動態網頁設計非常方便。在進行圖像處理時 ,一般處理靜態圖片非常容易 ,但是 ,在實際應用中常常需要動態地在網頁中生成二維的圖形.
基於JFreeChart開發的一個時序圖的繪制。代碼如下:
實例中createDataset()方法用於創建數據集合對象。時序圖的知談數據集合與其他數據集合不同,它需要添加一個時間段內的所有數據,通常採用TimeSeries類進行添加。該實例中通過Math類的random()方搭巧碰法進行隨機生成。
import java.awt.*;
import java.awt.event.ActionEvent;
import
java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import
java.io.DataInputStream;
import java.io.FileOutputStream;
import
java.io.IOException;
import java.net.URL;
import
java.net.URLConnection;
import java.text.DateFormat;
import
java.text.ParseException;
import java.text.SimpleDateFormat;
import
java.util.Calendar;
import java.util.Date;
import java.util.Random;
import javax.swing.JApplet;
import javax.swing.Timer;
import org.jfree.chart.*;
import
org.jfree.chart.annotations.CategoryTextAnnotation;
import
org.jfree.chart.axis.CategoryAnchor;
import
org.jfree.chart.axis.CategoryAxis;
import
org.jfree.chart.axis.CategoryLabelPositions;
import
org.jfree.chart.axis.DateAxis;
import
org.jfree.chart.axis.DateTickUnit;
import
org.jfree.chart.axis.DateTickUnitType;
import
org.jfree.chart.axis.ValueAxis;
import
org.jfree.chart.labels.;
import
org.jfree.chart.plot.CategoryPlot;
import
org.jfree.chart.plot.PlotOrientation;
import
org.jfree.chart.plot.XYPlot;
import
org.jfree.chart.renderer.category.BarRenderer;
import
org.jfree.chart.title.TextTitle;
import
org.jfree.data.category.CategoryDataset;
import
org.jfree.data.category.IntervalCategoryDataset;
import org.jfree.chart.axis.NumberAxis;
import
org.jfree.data.category.DefaultCategoryDataset;
import
org.jfree.data.gantt.Task;
import org.jfree.data.gantt.TaskSeries;
import
org.jfree.data.gantt.TaskSeriesCollection;
import
org.jfree.data.time.Day;
import org.jfree.data.time.Second;
import
org.jfree.data.time.TimeSeries;
import
org.jfree.data.time.TimeSeriesCollection;
import
org.jfree.data.xy.XYDataset;
public class shixutu extends JApplet {
//PLOT_FONT是一靜態的字體常量對象,使用此對象可以避免反復用到的字體對象被多次創建
private static final Font PLOT_FONT = new Font("黑體", Font.ITALIC ,
18);
JFreeChart chart;
//創建數據動態更新的監聽
class DataGenerator extends Timer
implements ActionListener {
private static final long serialVersionUID =
3977867288743720504L;
String
equID;
//設備ID號
int
totalTask;
//任務數
String[][]
strTask;
//任務情況
public void
actionPerformed(ActionEvent actionevent) {
addTotalObservation();
} DataGenerator()
{
super(1000,
null);
addActionListener(this);
System.out.println("super");
}
}
//將更新的數據添加到chart中
private void addTotalObservation()
{
System.out.println("addTotalObservation");
//設置新的數據集
chart.getXYPlot().setDataset(createDataset());
//通知Jfreechart
數據發生了改變,重新繪制柱狀圖
if
(chart != null)
{
chart.fireChartChanged();
}
}
private static void
processChart(JFreeChart chart)
{
//設置標題字體
chart.getTitle().setFont(new Font("隸書", Font.BOLD,
26));
//設置背景色
chart.setBackgroundPaint(new
Color(252,175,134));
XYPlot plot = chart.getXYPlot();
//獲取圖表的繪制屬性
plot.setDomainGridlinesVisible(false);
//設置網格不顯示
//獲取時間軸對象
DateAxis dateAxis = (DateAxis)
plot.getDomainAxis();
dateAxis.setLabelFont(PLOT_FONT);
//設置時間軸字體
//設置時間軸標尺值字體
dateAxis.setTickLabelFont(new
Font("宋體",Font.PLAIN,12));
dateAxis.setLowerMargin(0.0);
//設置時間軸上顯示的最小值
//獲取數據軸對象
ValueAxis valueAxis =
plot.getRangeAxis();
valueAxis.setLabelFont(PLOT_FONT);
//設置數據字體
DateFormat format = new SimpleDateFormat("mm分ss秒");
//創建日期格式對象
//創建DateTickUnit對象
DateTickUnit dtu = new
DateTickUnit(DateTickUnitType.SECOND,30,format);
dateAxis.setTickUnit(dtu);
//設置日期軸的日期標簽 } //將結果輸出在文件中
private static
void writeChartAsImage(JFreeChart chart)
{
FileOutputStream fos_jpg =
null;
try
{
fos_jpg = new
FileOutputStream("D:\test\shixutu.jpg");
ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 400, 300,
null);
} catch (Exception e)
{
e.printStackTrace();
} finally
{
try
{
fos_jpg.close();
} catch (Exception e)
{
}
}
}
//創建數據集合對象
public static XYDataset createDataset()
{
//實例化TimeSeries對象
TimeSeries timeseries = new
TimeSeries("Data");
Second second = new Second();
//實例化Day
double d =
50D;
//添加一年365天的數據
for (int i = 0; i < 500; i++)
{
d = d + (Math.random() - 0.5) * 10;
//創建隨機數據
timeseries.second(day, d);
//向數據集合中添加數據
second = (Second)
second.next();
}
TimeSeriesCollection timeSeriesCollection =
new
TimeSeriesCollection(timeseries);
//返回數據集合對象
return timeSeriesCollection; }//Applet程序初始化
public void init()
{
// 1.
得到數據
XYDataset dataset =
createDataset();
// 2.
構造chart
chart =
ChartFactory.createTimeSeriesChart(
"時序圖示範", //
圖表標題
"時間", //
目錄軸的顯示標簽--橫軸
"數值", //
數值軸的顯示標簽--縱軸
dataset, //
數據集
false,
false, //
是否生成工具
false //
是否生成URL鏈接
);
// 3.
處理chart中文顯示問題
processChart(chart);
// 4.
chart輸出圖片
//writeChartAsImage(chart);
// 5. chart
以swing形式輸出
//6.使用applet輸出
ChartPanel chartPanel = new
ChartPanel(chart);
chartPanel.setPreferredSize(new
java.awt.Dimension(800,500));
getContentPane().add(chartPanel); (new
DataGenerator()).start();
}
public void
paint(Graphics g)
{
if
(chart != null)
{
chart.draw((Graphics2D) g,
getBounds());
}
}
public void destroy() {
}
}