001package com.ganteater.ae.desktop.view; 002 003import java.awt.BorderLayout; 004import java.util.Properties; 005 006import org.jfree.chart.ChartFactory; 007import org.jfree.chart.ChartPanel; 008import org.jfree.chart.JFreeChart; 009import org.jfree.chart.axis.NumberAxis; 010import org.jfree.chart.labels.ItemLabelAnchor; 011import org.jfree.chart.labels.ItemLabelPosition; 012import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; 013import org.jfree.chart.plot.CategoryPlot; 014import org.jfree.chart.plot.PlotOrientation; 015import org.jfree.chart.renderer.category.CategoryItemRenderer; 016import org.jfree.data.category.DefaultCategoryDataset; 017import org.jfree.ui.TextAnchor; 018 019import com.ganteater.ae.AEManager; 020 021public class BarChart extends PresentationPanel { 022 private static final long serialVersionUID = 1L; 023 024 private DefaultCategoryDataset dataset; 025 private JFreeChart chart = null; 026 027 public BarChart(Properties params, AEManager manager) { 028 super(params); 029 030 String title = params.getProperty("title"); 031 String xAxisLabel = params.getProperty("xAxisLabel"); 032 String yAxisLabel = params.getProperty("yAxisLabel"); 033 034 dataset = new DefaultCategoryDataset(); 035 chart = ChartFactory.createBarChart(title, xAxisLabel, yAxisLabel, dataset, PlotOrientation.VERTICAL, true, 036 true, true); 037 038 CategoryPlot plot = chart.getCategoryPlot(); 039 plot.setDomainGridlinesVisible(true); 040 041 CategoryItemRenderer renderer = ((CategoryPlot) chart.getPlot()).getRenderer(); 042 renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); 043 renderer.setBaseItemLabelsVisible(true); 044 ItemLabelPosition position = new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.TOP_CENTER); 045 renderer.setBasePositiveItemLabelPosition(position); 046 047 final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); 048 rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); 049 050 ChartPanel comp = new ChartPanel(chart); 051 add(comp, BorderLayout.CENTER); 052 } 053 054 @Override 055 public void out(Object data, Properties properties) { 056 if (data instanceof String) { 057 double value = Double.parseDouble((String) data); 058 Comparable<?> row = properties.getProperty("row"); 059 Comparable<?> column = properties.getProperty("column"); 060 061 CategoryPlot plot = chart.getCategoryPlot(); 062 final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); 063 if (value != Math.ceil(value) && rangeAxis.getStandardTickUnits() == NumberAxis.createIntegerTickUnits()) { 064 rangeAxis.setStandardTickUnits(NumberAxis.createStandardTickUnits()); 065 } 066 067 dataset.addValue((int) value, row, column); 068 } 069 } 070}