|
From: Carlos <ma...@us...> - 2007-08-18 14:36:17
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/graphics In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv1992/src/java/net/sf/tail/graphics Added Files: CombinedSeriesAndFlowChart.java CashFlowDataset.java Log Message: Classe para carregar um dataset atravez do cashflow e sua classe de teste. Classe que gera um chart do valor da ação combinado com o cashflow. --- NEW FILE: CombinedSeriesAndFlowChart.java --- package net.sf.tail.graphics; import java.awt.Color; import net.sf.tail.graphics.forms.ShapeFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.CombinedDomainCategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.LineAndShapeRenderer; import org.jfree.data.category.CategoryDataset; import org.jfree.data.general.DatasetChangeEvent; import org.jfree.data.general.DatasetChangeListener; public class CombinedSeriesAndFlowChart implements DatasetChangeListener { private CategoryDataset seriesDataSet; private CategoryDataset flowDataSet; private CategoryPlot seriesPlot; private CategoryPlot flowPlot; private LineAndShapeRenderer lineAndShapeRenderer; public CombinedSeriesAndFlowChart(CategoryDataset seriesDataSet, CategoryDataset flowDataSet) { this.seriesDataSet = seriesDataSet; this.flowDataSet = flowDataSet; this.seriesDataSet.addChangeListener(this); this.flowDataSet.addChangeListener(this); this.lineAndShapeRenderer = new LineAndShapeRenderer(true, true); } public JFreeChart createChart(String chartName) { NumberAxis seriesNumberAxis = new NumberAxis("Stock Value"); seriesNumberAxis.setAutoRangeIncludesZero(false); seriesPlot = new CategoryPlot(seriesDataSet, null, seriesNumberAxis, lineAndShapeRenderer); seriesPlot.setBackgroundPaint(Color.BLACK); NumberAxis flowNumberAxis = new NumberAxis("Money Amount"); flowNumberAxis.setAutoRangeIncludesZero(false); flowPlot = new CategoryPlot(flowDataSet, null, flowNumberAxis, lineAndShapeRenderer); flowPlot.setBackgroundPaint(Color.BLACK); CombinedDomainCategoryPlot combinedplot = new CombinedDomainCategoryPlot(); combinedplot.setGap(10D); combinedplot.add(seriesPlot, 1); combinedplot.add(flowPlot, 1); combinedplot.setOrientation(PlotOrientation.VERTICAL); JFreeChart jfreechart = new JFreeChart("Combined Series and Flow Chart", JFreeChart.DEFAULT_TITLE_FONT, combinedplot, true); // //Setando labels em 90 graus // CategoryAxis categoryAxis = plot.getDomainAxis(); // categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_90); // // //Setando tamanho do grafico // NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); // rangeAxis.setAutoRangeIncludesZero(false); // // //Setando tamanho do label // categoryAxis.setLabelFont(new Font("SansSerif", 0, 10)); // // //Setando tamanho do label de cada tick // categoryAxis.setTickLabelFont(new Font("SansSerif", 0, 10)); //gerando pontos setSeriesShapes(); return jfreechart; } /** * @param dataSet * @param plot */ private void setSeriesShapes() { for (int i = 0; i < seriesDataSet.getRowCount(); i++) { lineAndShapeRenderer.setSeriesShape(i,ShapeFactory.getPoint()); } seriesPlot.setRenderer(lineAndShapeRenderer); flowPlot.setRenderer(lineAndShapeRenderer); } public void datasetChanged(DatasetChangeEvent event) { setSeriesShapes(); } } --- NEW FILE: CashFlowDataset.java --- package net.sf.tail.graphics; import java.util.List; import net.sf.tail.TimeSeries; import net.sf.tail.flow.CashFlow; import org.jfree.data.DefaultKeyedValues2D; import org.jfree.data.category.CategoryDataset; import org.jfree.data.general.AbstractDataset; @SuppressWarnings("unchecked") public class CashFlowDataset extends AbstractDataset implements CategoryDataset { private static final long serialVersionUID = -7204964027452086107L; private DefaultKeyedValues2D data; private final int DATASET_SIZE; private CashFlow cashFlow; private int firstIndex; private int lastIndex; private String name; private TimeSeries series; public CashFlowDataset(TimeSeries series, CashFlow cashFlow, int firstIndex, int lastIndex) { this.data = new DefaultKeyedValues2D(); this.cashFlow = cashFlow; this.firstIndex = firstIndex; this.lastIndex = lastIndex; this.series = series; this.DATASET_SIZE = lastIndex - firstIndex; this.name = "Money Amount"; loadValues(firstIndex, lastIndex); } private void loadValues(int firstIndex, int lastIndex) { data = new DefaultKeyedValues2D(); for (int j = firstIndex; j <= lastIndex; j++) { data.addValue(cashFlow.getValue(j), this.getName(), series.getTick(j).getDate().toString("hh:mm d/M/yyyy")); } } public int getColumnIndex(Comparable key) { return this.data.getColumnIndex(key); } public Comparable getColumnKey(int column) { return this.data.getColumnKey(column); } public List getColumnKeys() { return this.data.getColumnKeys(); } public int getRowIndex(Comparable key) { return this.data.getRowIndex(key); } public Comparable getRowKey(int row) { return this.data.getRowKey(row); } public List getRowKeys() { return this.data.getRowKeys(); } public Number getValue(Comparable rowKey, Comparable columnKey) { return this.data.getValue(rowKey, columnKey); } public int getColumnCount() { return this.data.getColumnCount(); } public int getRowCount() { return this.data.getRowCount(); } public Number getValue(int row, int column) { return this.data.getValue(row, column); } public void moveRight() { if(lastIndex + 1 < series.getSize()){ lastIndex++; data.addValue(cashFlow.getValue(lastIndex), this.getName() ,series.getTick(lastIndex).getDate().toString("hh:mm d/M/yyyy")); if(data.getColumnCount() >= DATASET_SIZE){ firstIndex++; data.removeColumn(0); } fireDatasetChanged(); } } public void moveLeft() { if(firstIndex > 0){ firstIndex--; lastIndex--; loadValues(firstIndex, lastIndex); fireDatasetChanged(); } } public String getName() { return name; } } |