JFreeChartを使って、グラフを破線で表示する。
import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Stroke; 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.axis.NumberTickUnit; import org.jfree.chart.axis.TickUnit; import org.jfree.chart.axis.TickUnits; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; public class FigTest2 extends JFrame implements ActionListener { Random rand = new Random(); //Figを作成 public void MakeFig() { JFrame figFrame = new JFrame("Fig"); figFrame.setSize(500, 400); figFrame.setLocationRelativeTo(null); figFrame.setVisible(true); //グラフに表示するデータの作成 int [] data = new int [50]; for (int i = 0; i < 50; i++) { data[i] = rand.nextInt(100) + 1; } XYSeriesCollection trace = new XYSeriesCollection(); XYSeries series = new XYSeries("Trace"); //XYSeriesへのデータの追加 for (int i = 0; i < 50; i++) { series.add(i, data[i]); } trace.addSeries(series); //JFreeChartの作成 JFreeChart chart = ChartFactory.createXYLineChart( " ", "Frame", "Value", trace, PlotOrientation.VERTICAL, true, false, false); //レジェンドの除去 chart.removeLegend(); //X軸とY軸の目盛間隔の変更 XYPlot plot = chart.getXYPlot(); ValueAxis xAxis = plot.getDomainAxis(); ValueAxis yAxis = plot.getRangeAxis(); TickUnits tx = new TickUnits(); TickUnits ty = new TickUnits(); TickUnit uniX = new NumberTickUnit(10); TickUnit uniY = new NumberTickUnit(20); tx.add(uniX); ty.add(uniY); xAxis.setStandardTickUnits(tx); yAxis.setStandardTickUnits(ty); //グラフの背景の色を指定 plot.setBackgroundPaint(Color.white); //グラフを破線にする float dash [] = {4f, 5f}; Stroke dashed = new BasicStroke(2f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f); XYLineAndShapeRenderer render = new XYLineAndShapeRenderer(); render.setSeriesStroke(0, dashed); plot.setRenderer(render); //Chartを貼り付ける用のPanelの作成とフレームへの貼り付け ChartPanel cpane = new ChartPanel(chart); figFrame.getContentPane().add(cpane); } public void actionPerformed (ActionEvent e) { String cmd = e.getActionCommand(); if (cmd.equals("Open")) { MakeFig(); } } FigTest2 () { JButton button = new JButton ("Make Fig"); button.setBounds(40, 10, 90, 30); button.addActionListener(this); button.setActionCommand("Open"); JPanel pane = new JPanel (); pane.setLayout(null); pane.add(button); getContentPane().add(pane, BorderLayout.CENTER); } public static void main(String[] args) { FigTest2 frame = new FigTest2 (); frame.setTitle("Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 180, 90); frame.setVisible(true); } }
このプログラムの実行例は次のようになる。
グラフ表示を破線にするコードは下記で、
//グラフを破線にする float dash [] = {4f, 5f}; Stroke dashed = new BasicStroke(2f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f); XYLineAndShapeRenderer render = new XYLineAndShapeRenderer(); render.setSeriesStroke(0, dashed); plot.setRenderer(render);
この中の
float dash [] = {4f, 5f};
の部分で、破線パターンを決めている。線を引く長さが"4f"で、空白になる長さが"5f"である。
また、
Stroke dashed = new BasicStroke(2f,
の"2f"は線の太さを示す。
他の項目の詳細は、OracleのHPBasicStroke (Java Platform SE 6)を参照されたし。