odczyt z pliku z tworzenie wykresu

0

Potrzebuje ten program przerobić tak by wczytywał dane z pliku dane.txt (żeby nie było opcji wybrania pliku, ani żadnej innej) i robił wykres. Czy ktoś mógłby mi pomóc?

package project;

import java.awt.BorderLayout;
import java.awt.event.ActionListener;

import javax.swing.JFrame;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
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 Plot extends JFrame implements ActionListener {
	
	private static final long serialVersionUID = 1L;

	protected static File file;
	protected static FileReader fR;
	BufferedReader bufferedReader;
	private List<Double> X = new ArrayList<Double>();
	private List<Double> Y = new ArrayList<Double>();
	public Plot() {
				super("Wykresy");
				setSize(600, 600);
				setLayout(new BorderLayout());
				
				JMenuBar menuBar = new JMenuBar();
				JMenu menu = new JMenu("Opcje");
				JMenuItem wczytaj= new JMenuItem("Wczytaj dane");
				JMenuItem load = new JMenuItem("Pobierz dane");
				
				
				menuBar.add(menu);
				
				wczytaj.addActionListener(new ActionListener(){
					public void actionPerformed(ActionEvent e) {
						final JFileChooser fc = new JFileChooser();
						int returnVal = fc.showOpenDialog(fc);
						file = fc.getSelectedFile();
						if (returnVal != JFileChooser.APPROVE_OPTION){
			                return;
			            }
						try {
							
							fR = new FileReader(file);
							bufferedReader = new BufferedReader(fR);
							String linia = null;
							while((linia = bufferedReader.readLine()) != null){
								String holder[] = linia.split("\t");
								X.add(Double.parseDouble(holder[0]));
								Y.add(Double.parseDouble(holder[1]));
							}
							XYSeries series = new XYSeries("Nazwa serii 1");
							for(int i = 0;i<X.size();i++) {
								series.add(X.get(i), Y.get(i));
							}
							XYSeriesCollection dataset = new XYSeriesCollection();
							dataset.addSeries(series);
							JFreeChart chart = ChartFactory.createXYLineChart(
									"Wykres XY",
									"Opis osi X", 
									"Opis osi Y", 
									dataset, 
									PlotOrientation.VERTICAL, 
									true, 
									true, 
									false
								);
							
							ChartPanel frame1=new ChartPanel(chart);
							getContentPane().add(frame1);
							revalidate();
						} catch (FileNotFoundException e1) {
							e1.printStackTrace();
						} catch (IOException e1) {
							e1.printStackTrace();
						}
						
					}
				});
				menu.add(wczytaj);
				menu.add(load);
				add(BorderLayout.NORTH, menuBar);
			
		
	
	load.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e) {
			try {
				Loading.zapis();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			
            }
		});
	}

	
	
			public static void chart(String arg[]){
				
			}
			
			

	@Override
	public void actionPerformed(java.awt.event.ActionEvent arg0) {
	//	setLayout(new BorderLayout());
		//setVisible(true);
		
		
		SwingUtilities.invokeLater(new Runnable() {

			@Override
			public void run() {
				JFrame f = new Plot();
				f.setLocationRelativeTo(null);
				f.setVisible(true);
			}
			
		
		});
		
		
	}
	
	
}

0

Nie wiem, czy dobrze zrozumiałem. Chcesz żeby program automatycznie wczytywał dane z pliku dane.txt bez potrzeby wybierania tego pliku? Jeśli tak to wystarczy wywalić ten fragment kodu:

final JFileChooser fc = new JFileChooser();
int returnVal = fc.showOpenDialog(fc);
file = fc.getSelectedFile();
if (returnVal != JFileChooser.APPROVE_OPTION){
    return;
}

i na sztywno ustawić:

fR = new FileReader("dane.txt");

Nie zapomnij też sprawdzać, czy udało się plik otworzyć. Jeżeli to nie o to chodziło to postaraj się trochę dokładniej wyjaśnić jak to powinno działać.

To miał być main?

public static void chart(String arg[]){

}

Nigdy nie byłem aż tak dociekliwy i nie sprawdzałem, ale wydaje mi się, że raczej nie zadziała. Funkcja main nie może być pusta bo to z niej wywołujesz inne funkcje i tworzysz obiekty. Twój main mógłby wyglądać tak:

JFrame f = new Plot();
f.setLocationRelativeTo(null);
f.setVisible(true);

1 użytkowników online, w tym zalogowanych: 0, gości: 1