JFeeChartを使った、折れ線グラフの追加と削除の方法
以前、ActionEventに連動して折れ線グラフを追加することを書いたので、今回はActionEventに連動して追加した折れ線グラフを削除するコードを書いた。
import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; public class RemoveTest extends JFrame implements ActionListener { Random rand = new Random(); JFrame sFrame; XYSeriesCollection trace; XYSeries series; XYSeries series1; XYSeries series2; ChartPanel cpane; int counter = 0; int remCounter; int [] a; int [] b; int [] c; //グラフに書く用のDataを作成する public void MakeData() { a = new int [50]; b = new int [50]; c = new int [50]; for (int i = 0; i < 50; i++) { a[i] = rand.nextInt(100) + 1; b[i] = rand.nextInt(80) + 1; c[i] = rand.nextInt(60) + 1; } } //SeriesへのDataの添付 public void seriesAdd(XYSeries a, int [] data) { for (int i = 0; i < data.length; i++) { a.add(i, data[i]); } } //最初のグラフを描く public void MakeFig() { MakeData(); sFrame = new JFrame("Fig"); sFrame.setBounds(300, 300, 300, 200); sFrame.setVisible(true); trace = new XYSeriesCollection (); series = new XYSeries("check"); seriesAdd(series, a); trace.addSeries(series); JFreeChart chart = ChartFactory.createXYLineChart( "Data", "Frame", "Value", trace, PlotOrientation.VERTICAL, true, false, false); cpane = new ChartPanel(chart); sFrame.getContentPane().add(cpane); } //2つ目のグラフを追加 public void add1() { series1 = new XYSeries("Test1"); seriesAdd(series1, b); trace.addSeries(series1); sFrame.add(cpane); } //3つ目のグラフを追加 public void add2() { series2 = new XYSeries("Test2"); seriesAdd(series2, c); trace.addSeries(series2); sFrame.add(cpane); } //2つ目のグラフを削除 public void rem1() { trace.removeSeries(series1); sFrame.add(cpane); } //3つ目のグラフを削除 public void rem2() { trace.removeSeries(series2); sFrame.add(cpane); } public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); if (cmd.equals("make")) { //グラフの作成 MakeFig(); } else if (cmd.equals("add")) { //2つ目のグラフを追加 if (counter == 0) { add1(); counter++; remCounter = 1; } else if (counter == 1){ //3つ目のグラフを追加 add2(); remCounter = 0; } } else if (cmd.equals("remove")) { //3つ目のグラフを削除 if (remCounter == 0) { rem2(); remCounter++; counter=1; } else if (remCounter == 1) { //2つ目のグラフを削除 rem1(); counter=0; } } } RemoveTest () { JButton button = new JButton ("Make"); JButton addB = new JButton ("add"); JButton remB = new JButton ("Remove"); button.addActionListener(this); addB.addActionListener(this); remB.addActionListener(this); button.setActionCommand("make"); addB.setActionCommand("add"); remB.setActionCommand("remove"); button.setBounds(40, 10, 80, 30); addB.setBounds(40, 50, 80, 30); remB.setBounds(40, 90, 80, 30); JPanel pane = new JPanel(); pane.setLayout(null); pane.add(button); pane.add(addB); pane.add(remB); getContentPane().add(pane, BorderLayout.CENTER); } public static void main(String[] args) { RemoveTest frame = new RemoveTest (); frame.setBounds(10, 10, 180, 170); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
折れ線グラフの削除は、
public void rem1() { trace.removeSeries(series1); sFrame.add(cpane); }
の部分で行っている。
折れ線グラフの追加は"addSeries"で、削除は"removeSeries"で出来る。