📄 datacharttool.java
字号:
import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.FileReader;import java.util.StringTokenizer;import javax.swing.JFileChooser;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTabbedPane;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.axis.NumberAxis;import org.jfree.chart.labels.StandardCategoryToolTipGenerator;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.renderer.category.BarRenderer;import org.jfree.chart.renderer.category.LineAndShapeRenderer;import org.jfree.data.category.CategoryDataset;import org.jfree.data.category.DefaultCategoryDataset;import org.jfree.data.general.DefaultPieDataset;import org.jfree.data.general.PieDataset;import org.jfree.experimental.chart.plot.CombinedCategoryPlot;import org.jfree.ui.ApplicationFrame;import org.jfree.ui.RefineryUtilities;/** * A demo for the {@link CombinedCategoryPlot} class. */public class DataChartTool extends ApplicationFrame { private static final long serialVersionUID = 1L; private static String DEFAULT_FILE_NAME="data.csv"; /** * Creates a new demo instance. * * @param title the frame title. */ String dataFileName = null; public DataChartTool(String title) { super(title); setJMenuBar(createMenuBar()); createDefaultPanel(); this.pack(); } private JPanel createDefaultPanel(){ JPanel chartPanel = new JPanel(); chartPanel.add(new JLabel("Welcome to use Data Chart Tool!")); chartPanel.setPreferredSize(new java.awt.Dimension(500, 270)); setContentPane(chartPanel); /*JTabbedPane tabPane = new JTabbedPane(); chartPanel.setLayout(new BorderLayout()); tabPane.addTab("1", new JPanel()); chartPanel.add(tabPane);*/ return chartPanel; } public void reload(){ if(dataFileName==null){ JOptionPane.showMessageDialog(DataChartTool.this, "Please select a file!"); return; } load(dataFileName); } public void load(String file){ JPanel main = new JPanel(); JTabbedPane tabPane = new JTabbedPane(); main.setLayout(new BorderLayout()); tabPane.addTab("Broken line chart", createDemoPanel(file)); tabPane.addTab("Pie-chart", createDemoPanel2(file)); main.add(tabPane); main.setPreferredSize(new java.awt.Dimension(500, 270)); setContentPane(main); main.setVisible(true); //this.pack(); } public static JPanel createDemoPanel2(String file) { JFreeChart chart = createChart(createDataset(file)); return new ChartPanel(chart); } private static JFreeChart createChart(PieDataset dataset) { JFreeChart chart = ChartFactory.createPieChart( "Pie chart", // 僞僀僩儖 dataset, // 僨乕僞乮妱傝乯 true, // 堄枴偼晄柧 true, //丂堄枴偼晄柧 false //丂堄枴偼晄柧 ); return chart; } /** * Creates a dataset. * * @return A dataset. */ public static CategoryDataset createDataset1(String file) { DefaultCategoryDataset result = new DefaultCategoryDataset(); String series1 = "Data"; int iLineCount = 0; int iTokenCount = 0; String line = null; try { // 們倱倴僼傽僀儖傪撉傒庢傞 String fileName = (file==null?DEFAULT_FILE_NAME:file);; BufferedReader in = new BufferedReader(new FileReader(fileName)); int i = 1; while ((line = in.readLine()) != null) { // 摢偐傜俀峴偟偐傪撉傑側偄 iLineCount++; StringTokenizer st = new StringTokenizer(line, ","); while (st.hasMoreTokens()) { iTokenCount++; // 丂寁悢丗奺妱傝偺柤慜偲偡傞 double dValue = Double.valueOf(st.nextToken()) .doubleValue(); result.addValue(dValue, series1, "Data"+i++); } // if (iLineCount > 2) { // 峴栚偼俀埲忋挻偊傞偲丄柍帇偡傞 break; } } } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, "Data format is incorrect!"); } return result; } /** * Creates a dataset. * * @return A dataset. */ public static CategoryDataset createDataset2(String file) { DefaultCategoryDataset result = new DefaultCategoryDataset(); int iLineCount = 0; int iTokenCount = 0; String line = null; String series1 = "Type1"; try { // 們倱倴僼傽僀儖傪撉傒庢傞 String fileName = (file==null?DEFAULT_FILE_NAME:file); BufferedReader in = new BufferedReader(new FileReader(fileName)); int i = 1; while ((line = in.readLine()) != null) { // 摢偐傜俀峴偟偐傪撉傑側偄 iLineCount++; StringTokenizer st = new StringTokenizer(line, ","); while (st.hasMoreTokens()) { iTokenCount++; // 丂寁悢丗奺妱傝偺柤慜偲偡傞 double dValue = Double.valueOf(st.nextToken()) .doubleValue(); result.addValue(dValue, series1, "Data"+i++); } // if (iLineCount > 2) { // 峴栚偼俀埲忋挻偊傞偲丄柍帇偡傞 break; } } } catch (Exception e) { e.printStackTrace(); //JOptionPane.showMessageDialog(null, "Data format is incorrect!"); } return result; } private static PieDataset createDataset(String file) { int iLineCount = 0; int iTokenCount = 0; String line = null; // 墌僌儔僼偺僨乕僞傪弨旛偡傞 DefaultPieDataset dataset = new DefaultPieDataset(); try { // 們倱倴僼傽僀儖傪撉傒庢傞 String fileName = (file==null?DEFAULT_FILE_NAME:file); BufferedReader in = new BufferedReader(new FileReader(fileName)); while ((line = in.readLine()) != null) { // 摢偐傜俀峴偟偐傪撉傑側偄 iLineCount++; StringTokenizer st = new StringTokenizer(line, ","); while (st.hasMoreTokens()) { iTokenCount++; // 丂寁悢丗奺妱傝偺柤慜偲偡傞 double dValue = Double.valueOf(st.nextToken()) .doubleValue(); dataset.setValue(String.valueOf(iTokenCount), dValue); } // if (iLineCount > 2) { // 峴栚偼俀埲忋挻偊傞偲丄柍帇偡傞 break; } } // 僼傽僀儖偼嬻側傜採帵忣曬傪弌偡 if (iLineCount == 0) { // } } catch (Exception e) { e.printStackTrace(); //JOptionPane.showMessageDialog(null, "Data format is incorrect!"); } return dataset; } /** * Creates a chart. * * @return A chart. */ private static JFreeChart createChart(String file) { CategoryDataset dataset1 = createDataset1(file); NumberAxis rangeAxis1 = new NumberAxis("Value"); rangeAxis1.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); LineAndShapeRenderer renderer1 = new LineAndShapeRenderer(); renderer1 .setBaseToolTipGenerator(new StandardCategoryToolTipGenerator()); CategoryPlot subplot1 = new CategoryPlot(dataset1, null, rangeAxis1, renderer1); subplot1.setDomainGridlinesVisible(true); CategoryDataset dataset2 = dataset1;//createDataset2(file); NumberAxis rangeAxis2 = new NumberAxis("Value"); rangeAxis2.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); BarRenderer renderer2 = new BarRenderer(); renderer2 .setBaseToolTipGenerator(new StandardCategoryToolTipGenerator()); CategoryPlot subplot2 = new CategoryPlot(dataset2, null, rangeAxis2, renderer2); subplot2.setDomainGridlinesVisible(true); CategoryAxis domainAxis = new CategoryAxis("Category"); CombinedCategoryPlot plot = new CombinedCategoryPlot(domainAxis, new NumberAxis("Range")); plot.add(subplot1, 1); plot.add(subplot2, 1); JFreeChart result = new JFreeChart( "Broken line chart", null/*new Font("SansSerif", Font.BOLD, 12)*/, plot, true); return result; } /** * Creates a panel for the demo (used by SuperDemo.java). * * @return A panel. */ public static JPanel createDemoPanel(String file) { JFreeChart chart = createChart(file); return new ChartPanel(chart); } /** * Starting point for the demonstration application. * * @param args * ignored. */ private JMenuBar createMenuBar() { JMenu file, edit, help; file = new JMenu("File"); edit = new JMenu("Edit"); help = new JMenu("Help"); JMenuItem open, close; open = new JMenuItem("Open",'O'); close = new JMenuItem("Exit",'X'); close.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { System.exit(0); } }); JMenuItem refresh = new JMenuItem("Refresh",'R'); edit.add(refresh); refresh.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { reload(); } }); file.add(open); open.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { JFileChooser fd=new JFileChooser(); int result = fd.showOpenDialog(DataChartTool.this); if(result==JFileChooser.APPROVE_OPTION){ DataChartTool.this.dataFileName = fd.getSelectedFile().getAbsolutePath(); DataChartTool.this.reload(); } } }); file.addSeparator();// 加一条分隔线 file.add(close); JMenuBar bar = new JMenuBar(); bar.add(file); bar.add(edit); bar.add(help); JMenuItem helpItem = new JMenuItem("Help",'H'); help.add(helpItem); helpItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(DataChartTool.this, "2008-2009 NEC All rights reserved."); } }); return bar; } public static void main(String[] args) { String title = "Data Chart Tool"; DataChartTool demo = new DataChartTool(title); demo.pack(); RefineryUtilities.centerFrameOnScreen(demo); demo.setVisible(true); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -