odczyt z pliku z tworzenie wykresu

Odpowiedz Nowy wątek
2018-05-08 21:18
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);
            }

        });

    }

}
edytowany 1x, ostatnio: Ewelina190, 2018-05-08 21:18

Pozostało 580 znaków

2018-05-09 09:49
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);
edytowany 1x, ostatnio: kiyo, 2018-05-09 09:58

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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