//------------------------------------
//excel獲取數據,需要jxl的架包
//-----------------------------------
package Q3;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
public class GetExcel {
public int rsColumns;
public int rsRows;
public void GetExcel(File file, double[][] fl ,int[] in ) {
jxl.Workbook rwb = null;
try {
// 構建Workbook對象 只讀Workbook對象
// 直接從本地文件創建Workbook
// 從輸入流創建Workbook
InputStream is = new FileInputStream(file);
rwb = Workbook.getWorkbook(is);
// Sheet(術語:工作表)就是Excel表格左下角的Sheet1,Sheet2,Sheet3但在程序中
// Sheet的下標是從0開始的
// 獲取第一張Sheet表
Sheet rs = rwb.getSheet(0);
rsColumns = rs.getColumns();
in[1]=rsColumns;
// 獲取Sheet表中所包含的總行數
rsRows = rs.getRows();
in[0]=rsRows;
// 獲取指這下單元格的對象引用
for (int i = 1; i < rsRows; i++) {
for (int j = 0; j < rsColumns; j++) {
Cell cell = rs.getCell(j, i);
fl[i][j] = Float.valueOf(cell.getContents()).floatValue();
//System.out.print(cell.getContents() + " "); //System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
} finally { rwb.close();
}
//---------------------------------
//數據封裝,需要jfreechart的架包
//--------------------------------
package Q3;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.Range;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleInsets;
import jxl.Cell;
import jxl.read.biff.BiffException;
public class HighLowChartDemo extends ApplicationFrame {
public HighLowChartDemo(String title, double[][] dl, int[] in) {
super(title);
JPanel jpanel = createDemoPanel(dl, in);
jpanel.setPreferredSize(new Dimension(500, 270));
setContentPane(jpanel);
}
private JPanel createDemoPanel(double[][] dl, int[] in) {
XYDataset dataset = createXYDataset(dl, in);
createChart(dataset);
JFreeChart jfreechart = createChart(createXYDataset(dl, in));
return new ChartPanel(jfreechart);
}
private XYDataset createXYDataset(double[][] dl, int[] in) {
XYSeriesCollection xySeriesCollection = new XYSeriesCollection();
XYSeries xyserie1 = new XYSeries("Fluctuation limit");
for (int i = 1; i < in[0]; i++) {
xyserie1.add(dl[i][3], dl[i][0]); xySeriesCollection.addSeries(xyserie1);
XYSeries xyserie2 = new XYSeries("Mean");
for (int i = 1; i < in[0]; i++) {
xyserie2.add(dl[i][3], dl[i][1]); xySeriesCollection.addSeries(xyserie2);
XYSeries xyserie3 = new XYSeries("Fluctuations offline");
for (int i = 1; i < in[0]; i++) {
xyserie3.add(dl[i][3], dl[i][2]); xySeriesCollection.addSeries(xyserie3);
return xySeriesCollection;
}
public static JFreeChart createChart(XYDataset dataset) {
String title = "Fluctuations in Figure";
String x = "X";
String y = "Y";
JFreeChart chart = ChartFactory.createXYLineChart(title, // 標題
x, // categoryAxisLabel (category軸,橫軸,X軸標籤)
y, // valueAxisLabel(value軸,縱軸,Y軸的標籤)
dataset, // dataset
PlotOrientation.VERTICAL, true, // legend
false, // tooltips
false); // URLs
// 使用CategoryPlot設置各種參數。以下設置可以省略。
XYPlot plot = (XYPlot) chart.getPlot(); plot.setBackgroundAlpha(0.5f); plot.setForegroundAlpha(0.5f);
TextTitle subtitle = new TextTitle("", new Font("隸書", Font.ITALIC, 15));
chart.addSubtitle(subtitle);
chart.setTitle(new TextTitle(title, new Font("隸書", Font.ITALIC, 15)));
chart.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 0, 1000,
Color.blue)); // String rfname = "pic.png";
// String fileName = "c:/" + rfname;
// try {
// // 年的用600*400;月的用800*400,用PNG生生成的圖片比較清楚
// ChartUtilities.saveChartAsPNG(new File(fileName), chart, 600, 400);
// } catch (IOException exz) {
// System.out.print("....Cant’t Create image File"); return chart;
}
//------------------------------------
//主窗體類
//------------------------------------
package Q3;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.Range;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;
import jxl.Cell;
import jxl.read.biff.BiffException;
public class MainWindow extends JFrame {
// ------------------------ // ------------------------
JLabel label, label2, label3;
JTextField textField;
JPanel panel;
JButton open;
double[][] dl = new double[1000][1000];
int[] in = new int[2];
public MainWindow() {
label = new JLabel("導入Excel表格:");
label3 = new JLabel(" 注 意:本系統暫時只能實現形如 data2.xls 的電子表格。");
open = new JButton("打開");
open.setMnemonic(KeyEvent.VK_I);
textField = new JTextField(25);
panel = new JPanel();
panel.setBorder(BorderFactory.createEmptyBorder(30, 50, 10, 100)); // 添加按鈕的事件處理 open.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
final JFileChooser fc = new JFileChooser();
int returnval = fc.showOpenDialog(panel);
java.io.File file = fc.getSelectedFile(); String path = file.getPath();
textField.setText(path);
// 獲取Excel的數據
GetExcel rd = new GetExcel();
rd.GetExcel(file, dl, in);
//調用生成圖片的方法 // 步驟1:創建XYDataset對象(準備數據)
HighLowChartDemo highlowchartdemo = new HighLowChartDemo(
"OHLC Demo 2",dl,in);
highlowchartdemo.pack();
RefineryUtilities.centerFrameOnScreen(highlowchartdemo);
highlowchartdemo.setVisible(true);
// System.out.println(path);
}
}); panel.add(label);
panel.add(textField);
panel.add(open);
panel.add(label3);
this.getContentPane().add(panel);
// 設置窗體屬性
setSize(650, 200);
setTitle("資金量-匯率波動圖生成器");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
public static void main(String[] args) {
MainWindow main = new MainWindow();
}
}