Witam
Mam pytanie. Chciałabym zrobić funkcje która zwróci mi JPanel z wykresem.
Mam tak to zrobione. Ale jest to źle jak to zrobić poprawnie?
Kod w załączniku. Będę bardzo wdzięczna za odpowiedź.
pozdrawiam
Witam
Mam pytanie. Chciałabym zrobić funkcje która zwróci mi JPanel z wykresem.
Mam tak to zrobione. Ale jest to źle jak to zrobić poprawnie?
Kod w załączniku. Będę bardzo wdzięczna za odpowiedź.
pozdrawiam
package model;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Rectangle;
import java.awt.Shape;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.LegendItem;
import org.jfree.chart.LegendItemCollection;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.util.Rotation;
public class PlotFile {
ArrayList<Double> time = new ArrayList<Double> ();
ArrayList<Double> value = new ArrayList<Double> ();
public void readFile (File file) {
time.clear();
value.clear();
BufferedReader br = null;
try {
br = new BufferedReader (new FileReader(file));
while (true) {
String line = br.readLine();
if (line == null) break;
String [] values = line.split(",");
time.add(Double.parseDouble(values[0].trim()));
value.add(Double.parseDouble(values[1].trim()));
}
}
catch (Exception e){
e.printStackTrace(); //lub komunikat o bledzie
}
}
public JPanel getChart()
{
final XYDataset dataset = createDataset();
final JFreeChart chart = createChart(dataset);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(800, 500));
}
private XYDataset createDataset() {
final XYSeries series = new XYSeries("Pomiar");
final XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
return dataset;
}
/**
* Creates a chart.
*
* @param dataset the data for the chart.
*
* @return a chart.
*/
private JFreeChart createChart(final XYDataset dataset) {
// create the chart...
final JFreeChart chart = ChartFactory.createXYLineChart(
"Pomiar pojemności płuc", // chart title
"X- Objętość[l] ", // x axis label
"Y-Przepływ [l/s]", // y axis label
dataset, // data
PlotOrientation.VERTICAL,
true, // include legend
true, // tooltips
false // urls
);
// NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
final XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(new Color(0xffffe0));
plot.setDomainGridlinesVisible(true);
plot.setDomainGridlinePaint(Color.lightGray);
plot.setRangeGridlinesVisible(true);
plot.setRangeGridlinePaint(Color.lightGray);
ValueAxis xaxis = plot.getRangeAxis();
xaxis.setRange(0.0,8.0);
ValueAxis yaxis = plot.getRangeAxis();
yaxis.setRange(0.0, 8.0);
return chart;
}
}
Może tak bedzie szybciej
"pokolorowałem" - bogdans