Lista rozwijana i odczytywanie z pliku dowolnej ilości danych

0

Cześć. Piszę program zawierający listę rozwijaną i mam problem. Chcę, aby po kliknięciu pojawiały mi się wykresy liniowe, tylko że nie wyświetlają się z danymi. Napisałam coś takiego. Proszę bardzo o pomoc.

import java.awt.Component;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
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 Ramka extends JFrame  implements ActionListener{
	
	JComboBox<String> lista;
	JLabel tekst;
	JPanel panel, wykres;
	JFreeChart w;
	Component chartPanel;
	
	double a,b,c,d,f,g,h,i,j,k,l,m;
	
	public Ramka(){
		setTitle("Wykres");
		setSize(1000,700);
		setLocationRelativeTo(null);

		tekst = new JLabel("Wykres");
		tekst.setFont(new Font("Serif", Font.PLAIN, 20));
		tekst.setBounds(0, 0, 400, 20);
		
		lista = new JComboBox<String>();
		lista.setBounds(50,100, 100, 20);
		lista.addItem("1");
		lista.addItem("2");
		lista.addItem("3");
		lista.addItem("4");
		lista.addItem("5");
		lista.addActionListener(this);
	
		JPanel panel = new JPanel();
		
		add(panel);

		Container cp = getContentPane();
	    cp.setLayout(new GridLayout(1,1));
	    cp.setBounds(0,200,500,400);

		XYSeries series = new XYSeries("XYGraph");
		series.add(a, b);
		series.add(c, d);
		series.add(m, f);
		series.add(g, h);
		series.add(i, j);
		series.add(k, l);
		XYSeriesCollection dataset = new XYSeriesCollection();
		dataset.addSeries(series);
		w=ChartFactory.createXYLineChart(
				"XY Chart", "X-axis", "Y-axis", dataset,
				PlotOrientation.VERTICAL, true, true, false);
		ChartPanel chartPanel = new ChartPanel(w);
		chartPanel.setBounds(0, 200, 500, 400);
		cp.add(chartPanel);
		
		panel.add(tekst);
		
		panel.add(lista);

		panel.add(chartPanel);
		
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		 Object zrodlo = e.getSource();
		 if(zrodlo == lista){
			 String wykres = (String) lista.getSelectedItem();
			 if (wykres.equals("1")){
			 a=1;
			 b=3; 
			 c=4;
			 d=5;
			 m=5;
			 f=9;
			 g=5;
			 h=2;
			 i=8;
			 j=5;
			 k=4;
			 l=2;
			 }
		 else if (wykres.equals("2"))
			 a=1;
			 b=3; 
			 c=4;
			 d=5;
			 m=5;
			 f=9;
			 g=5;
			 h=2;
			 i=8;
			 j=5;
			 k=4;
			 l=2;
		 }
		 else if (wykres.equals("3")){
			 a=1;
			 b=3; 
			 c=4;
			 d=5;
			 m=5;
			 f=9;
			 g=5;
			 h=2;
			 i=8;
			 j=5;
			 k=4;
			 l=2;
		 }
		 else if (wykres.equals("4")){
			 a=1;
			 b=3; 
			 c=4;
			 d=5;
			 m=5;
			 f=9;
			 g=5;
			 h=2;
			 i=8;
			 j=5;
			 k=4;
			 l=2;
		 }
		 else if (wykres.equals("5")){
			 a=1;
			 b=3; 
			 c=4;
			 d=5;
			 m=5;
			 f=9;
			 g=5;
			 h=2;
			 i=8;
			 j=5;
			 k=4;
			 l=2;
		 }
		 
	}
}
0

Od czego by tu zacząć... Za dużo do poprawy, więc wrzucam "gotowy" kod.

package luke.test;

import java.awt.Component;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
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 App extends JFrame implements ActionListener {

    JComboBox<String> lista;
    JLabel tekst;
    JPanel panel;
    JFreeChart w;
    Component chartPanel;

    double a, b, c, d, f, g, h, i, j, k, l, m;
    XYSeriesCollection dataset;

    public App() {
        setTitle("Wykres");
        setSize(1000, 700);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        tekst = new JLabel("Wykres");
        tekst.setFont(new Font("Serif", Font.PLAIN, 20));
        tekst.setBounds(0, 0, 400, 20);

        lista = new JComboBox<String>();
        lista.setBounds(50, 100, 100, 20);
        lista.addItem("1");
        lista.addItem("2");
        lista.addItem("3");
        lista.addItem("4");
        lista.addItem("5");
        lista.addActionListener(this);

        panel = new JPanel();

        XYSeries series = new XYSeries("XYGraph");
        series.add(a, b);
        series.add(c, d);
        series.add(m, f);
        series.add(g, h);
        series.add(i, j);
        series.add(k, l);
        dataset = new XYSeriesCollection();
        dataset.addSeries(series);
        w = ChartFactory.createXYLineChart(
                "XY Chart", "X-axis", "Y-axis", dataset,
                PlotOrientation.VERTICAL, true, true, false);
        chartPanel = new ChartPanel(w);
        panel.add(tekst);
        panel.add(lista);
        panel.add(chartPanel);
        add(panel);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Object zrodlo = e.getSource();
        if (zrodlo == lista) {
            String wykres = (String) lista.getSelectedItem();
            if (wykres.equals("1")) {
                a = 1d;
                b = 3d;
                c = 4d;
                d = 5d;
                m = 5d;
                f = 9d;
                g = 5d;
                h = 2d;
                i = 8d;
                j = 5d;
                k = 4d;
                l = 2d;
                changeData(wykres);
            } else if (wykres.equals("2")) {
                a = 1d;
                b = 8d;
                c = 2d;
                d = 7d;
                m = 3d;
                f = 1d;
                g = 4d;
                h = 5d;
                i = 5d;
                j = 9d;
                k = 6d;
                l = 2d;
                changeData(wykres);
            } else if (wykres.equals("3")) {
                a = 1d;
                b = 3d;
                c = 4d;
                d = 5d;
                m = 5d;
                f = 9d;
                g = 5d;
                h = 2d;
                i = 8d;
                j = 5d;
                k = 4d;
                l = 2d;
                changeData(wykres);
            } else if (wykres.equals("4")) {
                a = 1d;
                b = 3d;
                c = 4d;
                d = 5d;
                m = 5d;
                f = 9d;
                g = 5d;
                h = 2d;
                i = 8d;
                j = 5d;
                k = 4d;
                l = 2d;
                changeData(wykres);
            } else if (wykres.equals("5")) {
                a = 1d;
                b = 3d;
                c = 4d;
                d = 5d;
                m = 5d;
                f = 9d;
                g = 5d;
                h = 2d;
                i = 8d;
                j = 5d;
                k = 4d;
                l = 2d;
                changeData(wykres);
            }

        }
    }

    private void changeData(String title) {
        dataset.removeAllSeries();
        XYSeries ser = new XYSeries(title);
        ser.add(a, b);
        ser.add(c, d);
        ser.add(m, f);
        ser.add(g, h);
        ser.add(i, j);
        ser.add(k, l);
        dataset.addSeries(ser);
    }

    public static void main(String[] args) {
        new App().setVisible(true);
    }
}
0

Dziękuję bardzo ;) Jestem początkująca i nie wiedziałam jak z tego wybrnąć.

Edit: Mam jeszcze jedno pytanie: co muszę napisać, żeby te dane odczytać z pliku txt?

0
  1. Dobrze by było abyś miała dane w pliku uporządkowane
  2. Idealnie pasuje tu stworzenie klasy Point i utworzenie listy punktów, które będą czytane z pliku (opcjonalne)
  3. Skorzystać z następującego przykładu do czytania z pliku
    http://docs.oracle.com/javase/tutorial/essential/io/file.html
0

Mam zrobione odczytywanie z pliku, ale teraz chciałabym, żeby w actionPerformed zrobić tak, żeby odczytywanie danych było uogólnione. Zrobiłam tam pętlę for a później if, ale nie wiem dlaczego nie działa. Byłabym wdzięczna za pomoc.

package ramka;

public class Aktywator {

	public static void main(String[] args) {
		
		Ramka mojaRamka = new Ramka();
		mojaRamka.setVisible(true);

	}
}

package ramka;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Font;
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.IOException;
import java.util.ArrayList;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
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 Ramka extends JFrame  implements ActionListener{
	
	JComboBox<String> lista;
	JLabel tekst;
	JPanel panel;
	JFreeChart w;
	Component chartPanel;
	ArrayList<Dane> lista2 = new ArrayList<Dane>();
	int r;
	double a,b,c,d,f,g,h,i,j,k,l,m, xsr = 114/12, n = ((((1-xsr)*a)+((2-xsr)*b)+((3-xsr)*c)+((4-xsr)*d)+((5-xsr)*f)+
			((6-xsr)*g)+((7-xsr)*h)+((8-xsr)*i)+((9-xsr)*j)+((10-xsr)*k)+((11-xsr)*l)+((12-xsr)*m))/((1-xsr)+(2-xsr)+(3-xsr)+
					(4-xsr)+(5-xsr)+(6-xsr)+(7-xsr)+(8-xsr)+(9-xsr)+(10-xsr)+(11-xsr)+(12-xsr))), 
					ysr = (a+b+c+d+f+g+h+i+j+k+l+m)/12, o = ysr-(n*xsr), y11 = (n*1)+o, y12 = (n*12)+o;
	XYSeriesCollection akcje;
	
	public Ramka(){
		
		load(lista2);
		setTitle("Notowanie akcji giełdowych");
		setSize(1000,700);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		tekst = new JLabel("Notowanie akcji giełdowych");
        tekst.setFont(new Font("Serif", Font.PLAIN, 20));
        tekst.setBounds(0, 300, 400, 20);
        
        lista = new JComboBox<String>();
		lista.addItem("Akcja 1");
		lista.addItem("Akcja 2");
		lista.addItem("Akcja 3");
		lista.addItem("Akcja 4");
		lista.addItem("Akcja 5");
		lista.addActionListener(this);
		lista.setBounds(800,0, 100, 50);
	
		panel = new JPanel();

		akcje = new XYSeriesCollection();
		
		XYSeries serie1 = new XYSeries("Akcje");
		serie1.add(1, a);
		serie1.add(2, b);
		serie1.add(3, c);
		serie1.add(4, d);
		serie1.add(5, f);
		serie1.add(6, g);
		serie1.add(7, h);
		serie1.add(8, i);
		serie1.add(9, j);
		serie1.add(10, k);
		serie1.add(11, l);
		serie1.add(12, m);
		
		akcje.addSeries(serie1);
		
		XYSeries serie2 = new XYSeries("Średnia krocząca");
		serie2.add(2, (a+b+c)/3);
		serie2.add(3, (b+c+d)/3);
		serie2.add(4, (c+d+f)/3);
		serie2.add(5, (d+f+g)/3);
		serie2.add(6, (f+g+h)/3);
		serie2.add(7, (g+h+i)/3);
		serie2.add(8, (h+i+j)/3);
		serie2.add(9, (i+j+k)/3);
		serie2.add(10, (j+k+l)/3);
		serie2.add(11, (k+l+m)/3);
		
		XYSeries serie3 = new XYSeries("Trend");
		serie3.add(0, 5);
		serie3.add(12, 9);
		
		akcje.addSeries(serie2);
		
		akcje.addSeries(serie3);
		
		w=ChartFactory.createXYLineChart(
				"XY Chart", "Czas", "Cena", akcje,
				PlotOrientation.VERTICAL, true, true, false);

		
		chartPanel = new ChartPanel(w);
		chartPanel.setBounds(400, 100, 600, 500);

        panel.add(tekst);
		panel.add(lista);
		panel.add(chartPanel, BorderLayout.SOUTH);
		add(panel);	
		
		
	}
	
	private static void load(ArrayList <Dane> lista2) {
		File file = new File("Dane.txt");
		FileReader freader =null ;
		try {
			freader = new FileReader(file);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		BufferedReader breader = new BufferedReader(freader);
		lista2.clear();
		String line;
		try {
			while ((line = breader.readLine()) != null) {
				if (line.equals("Akcja")) {
					String nazwa = breader.readLine();
                    String a = breader.readLine();
                    String b = breader.readLine();
                    String c = breader.readLine();
                    String d = breader.readLine();
                    String f = breader.readLine();
                    String g = breader.readLine();
                    String h = breader.readLine();
                    String i = breader.readLine();
                    String j = breader.readLine();
                    String k = breader.readLine();
                    String l = breader.readLine();
                    String m = breader.readLine();

                    Dane mojDokumentTekstowy = new Dane(nazwa, a, b, c, d, f, g, h, i, j, k, l, m);
                    lista2.add(mojDokumentTekstowy);
				}
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			breader.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		 Object zrodlo = e.getSource();
		 if(zrodlo == lista){
             String wykres = (String) lista.getSelectedItem();
             for (int r = 0; r < lista2.size(); r++){
            	 if (wykres.equals(lista2.get(r)))
                 a = Double.parseDouble(lista2.get(r).geta());
                 b = Double.parseDouble(lista2.get(r).getb());
                 c = Double.parseDouble(lista2.get(r).getc());
                 d = Double.parseDouble(lista2.get(r).getd());
                 f = Double.parseDouble(lista2.get(r).getf());
                 g = Double.parseDouble(lista2.get(r).getg());
                 h = Double.parseDouble(lista2.get(r).geth());
                 i = Double.parseDouble(lista2.get(r).geti());
                 j = Double.parseDouble(lista2.get(r).getj());
                 k = Double.parseDouble(lista2.get(r).getk());
                 l = Double.parseDouble(lista2.get(r).getl());
                 m = Double.parseDouble(lista2.get(r).getm());

                 changeData(wykres);
            	 }
             }
	}
	private void changeData(String title) {

		akcje.removeAllSeries();
		XYSeries serie1 = new XYSeries(title);
		serie1.add(1, a);
		serie1.add(2, b);
		serie1.add(3, c);
		serie1.add(4, d);
		serie1.add(5, f);
		serie1.add(6, g);
		serie1.add(7, h);
		serie1.add(8, i);
		serie1.add(9, j);
		serie1.add(10, k);
		serie1.add(11, l);
		serie1.add(12, m);
		akcje.addSeries(serie1);
		
		XYSeries serie2 = new XYSeries("Średnia krocząca");
		serie2.add(2, (a+b+c)/3);
		serie2.add(3, (b+c+d)/3);
		serie2.add(4, (c+d+f)/3);
		serie2.add(5, (d+f+g)/3);
		serie2.add(6, (f+g+h)/3);
		serie2.add(7, (g+h+i)/3);
		serie2.add(8, (h+i+j)/3);
		serie2.add(9, (i+j+k)/3);
		serie2.add(10, (j+k+l)/3);
		serie2.add(11, (k+l+m)/3);
		akcje.addSeries(serie2);
		
		XYSeries serie3 = new XYSeries("Trend");
		serie3.add(0, 5);
		serie3.add(12, 9);
		akcje.addSeries(serie3);
	}
}

package ramka;

import java.util.ArrayList;

public class Dane {

    private String nazwa;
    private String a;
    private String b;
    private String c;
    private String d;
    private String f;
    private String g;
    private String h;
    private String i;
    private String j;
    private String k;
    private String l;
    private String m;
   
    public Dane(String nazwa, String a, String b, String c, String d, String f, String g, String h, String i, String j, String k, String l, String m)
    {
        this.nazwa = nazwa;
        this.a = a;
        this.b = b;
        this.c = c;
        this.d = d;
        this.f = f;
        this.g = g;
        this.h = h;
        this.i = i;
        this.j = j;
        this.k = k;
        this.l = l;
        this.m = m;

    }
    public void seta(String a) {
        this.a = a;
    }
    public String geta() {
        return a;
    }
    public void setb(String b) {
        this.b = b;
    }
    public String getb() {
        return b;
    }
    public void setc(String c) {
        this.c = c;
    }
    public String getc() {
        return c;
    }
    public void setd(String d) {
        this.d = d;
    }
    public String getd() {
        return d;
    }    
    public void setf(String f) {
        this.f = f;
    }
    public String getf() {
        return f;
    }
    public void setg(String g) {
        this.g = g;
    }
    public String getg() {
        return g;
    }    
    public void seth(String h) {
        this.h = h;
    }
    public String geth() {
        return h;
    }
    public void setj(String j) {
        this.j = j;
    }
    public String getj() {
        return j;
    }    
    public void setk(String k) {
        this.k = k;
    }
    public String getk() {
        return k;
    }
    public void seti(String i) {
        this.i = i;
    }
    public String geti() {
        return i;
    }    
    public void setl(String l) {
        this.l = l;
    }
    public String getl() {
        return l;
    }
    public void setm(String m) {
        this.m = m;
    }
    public String getm() {
        return m;
    }
}
0

Nie wiem co to znaczy uogólnione ale widzę, że w na pewno "coś" tu nie gra :)

  if (wykres.equals(lista2.get(r)))

Porównujesz Stringa oraz obiekt Dane. Może chciałaś coś takiego

  if (wykres.equals(lista2.get(r).getNazwa()))//tylko dodaj tego gettera w klasie Dane
0

Najpierw miałam dla wszystkich akcji pętlę if, a chciałabym tylko jedną pętlę, żeby kod nie był taki długi. Trudno mi się wysłowić :D

0

Jestem ciężko kapujący więc wybacz :) ja widzę w metodzie actionPerformed jedną pętlę i warunek i powinien on działać dla każdego itemu z CB tylko zmień na to co Ci napisałem w poście wyżej oraz nazwa wykresu z pliku musi być zgodna z item z CB

0

Spoko :) W ogóle jestem wdzięczna za pomoc. Zrobiłam tak jak napisałeś, ale teraz na wykresie zmieniają mi się tylko pierwsza wartość akcji i pierwsza wartość średniej kroczącej.

0

if powinien zawierać wszystkie parsowania +changeData a nie tylko pierwsze, dodaj klamry

0

Nie zwróciłam na to uwagi, działa. Jeszcze raz dzięki ;)

0

Chciałabym zmienić kod, żeby odczytywać z pliku dowolną ilość danych, a nie tylko od a do m.

        BufferedReader breader = new BufferedReader(freader);
        lista2.clear();
        String line;
        try {
            while ((line = breader.readLine()) != null) {
                if (line.equals("Akcja")) {
                    String nazwa = breader.readLine();
                    String a = breader.readLine();
                    String b = breader.readLine();
                    String c = breader.readLine();
                    String d = breader.readLine();
                    String f = breader.readLine();
                    String g = breader.readLine();
                    String h = breader.readLine();
                    String i = breader.readLine();
                    String j = breader.readLine();
                    String k = breader.readLine();
                    String l = breader.readLine();
                    String m = breader.readLine();

                    Dane mojDokumentTekstowy = new Dane(nazwa, a, b, c, d, f, g, h, i, j, k, l, m);
                    lista2.add(mojDokumentTekstowy);
                }
            } 

Tutaj chciałam dodać pętlę for i warunek, ale nie wiem od czego zacząć.

0

Skoro nie wiesz ile będzie punktów to w klasie dane nie twórz pól tylko listę punktów i do niej dodawaj czytane punkty

0

Wiem, że to podstawowa rzecz, ale jak zrobić listę punktów?

0

Ty poważnie pytasz? Nie wiesz jak utworzyć listę i bierzesz się za zaawansowane programy, zacznij może od "Hello world".

List<Point> points = new ArrayList<Point>();
0

Stworzyłam listę w klasie Dane.

package ramka;

import java.awt.Point;
import java.util.ArrayList;
import java.util.List;

public class Dane {

    private String nazwa;
    private List<Point> points = new ArrayList<Point>();
   
    public Dane(String nazwa, List<Point> points)
    {
        this.nazwa = nazwa;
        this.points = points;
    }
    public void setnazwa(String nazwa) {
        this.nazwa = nazwa;
    }
    public String getnazwa() {
        return nazwa;
    }
    public void setpoints(List<Point> points) {
        this.points = points;
    }
    public List<Point> getpoints() {
        return points;
    }
    public void addpoint(Point liczba){
    	this.points.add(liczba);
    }
} 

Ale nie wiem co zrobić teraz w Ramce, jak odczytać te dane.

		BufferedReader breader = new BufferedReader(freader);
		lista2.clear();
		String line;
		try {
            while ((line = breader.readLine()) != null) {
                if (line.equals("Akcja")) {
                    String nazwa = breader.readLine();
                    for (int p = 0; p<lista2.size(); p++)
                     //i tutaj nie wiem co napisać

                    Dane mojDokumentTekstowy = new Dane(nazwa, points);
                    lista2.add(mojDokumentTekstowy);					
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			breader.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
 

Bardzo proszę o pomoc.

0

na przykład tak:
przed pętlą czytającą stwórz pustą listę oraz nr porządkowy dla x(domyślam się że w pliku masz tylko wartości dla y)

List<Point> points = new ArrayList<>();
int position = 0; //0 lub 1

Teraz czytając plik dodawaj punkty

points.add(new Point(position,y));
position++;

Po operacji czytania stwórz model danych

new Dane(nazwa, points);
0

Dzięki, zrobiłam, mam nadzieję, że dobrze. ActionPerformed zmieniłam, dobrze zrobiłam?

 
            for (int r = 1; r < lista2.size(); r++){
            	 if (wykres.equals(lista2.get(r).getnazwa())){
            		 List<Point> points = new ArrayList<>();
	                 points.add(new Point(r, y));

                 changeData(wykres);
            	 }
            	 }
             }
 
0

np tak

for (int r = 1; r < lista2.size(); r++){
     if (wykres.equals(lista2.get(r).getnazwa())){
           Dane data = lista2.get(r);
           changeData(data); //zmien metode change data
     }
}
0

Próbuję to zmienić, ale wyskakuje mi błąd z XYSeries(data).

	private void changeData(Dane data) {

		akcje.removeAllSeries();
		XYSeries serie1 = new XYSeries(data);
		int position = 1;
		for (int p = 0; p < lista2.size(); p++){
			serie1.add(position, p);
			position++;
		
		akcje.addSeries(serie1);
		}
 
0
private void changeData(Dane data) {
        akcje.removeAllSeries();
        XYSeries serie1 = new XYSeries(data.getnazwa());
        List<Point> points = data.getpoints();
        for (Point el : points){
            serie1.add(el.x, el.y);
        }
        akcje.addSeries(serie1);
}
0

Dziękuję. A co zmienić w konstruktorze, w

akcje = new XYSeriesCollection(); 

Próbowałam napisać tak jak w changeData, ale data się nie zgadza, wyskakuje błąd.

0

Wyrzuć zmienne a,b... itd i pobierz dane z pierwszego modelu

0

Zrobiłam tak:

		akcje = new XYSeriesCollection();
		XYSeries serie1 = new XYSeries("Akcje");
		int position = 1;
		for (int p = 0; p < lista2.size(); p++){
			serie1.add(position, p);
			position++;
		}
		akcje.addSeries(serie1);
 
0

Zmienna lista2 zawiera listę obiektów Dane, wiec musisz najpierw pobrać pierwszy model danych z lista2 a następnie iterujesz po modelu i dodajesz series

0

O coś takiego chodziło?

		akcje = new XYSeriesCollection();
		XYSeries serie1 = new XYSeries("Akcje");
		int position = 1;
		for (int p = 0; p < lista2.size(); p++){
			int a = lista2.get(p).getpoints();
			serie1.add(position, a);
			position++;
		}
		akcje.addSeries(serie1);
 
0
Dane firstData = lista2.get(0);
for(Point el : firstData.getpoints()){
.      serie1.add(el.x, el.y);
}
akcje.addSeries(serie1);
0

Teraz wyskoczył mi błąd.

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
	at java.util.ArrayList.rangeCheck(Unknown Source)
	at java.util.ArrayList.get(Unknown Source)
	at ramka.Ramka.<init>(Ramka.java:76)
	at ramka.Aktywator.main(Aktywator.java:7)

dodanie znacznika <code class="none"> - @furious programming

0

Najpierw wczytaj dane z pliku do lista2 a potem z niej korzystaj... ciężko idzie...

0
package ramka;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Font;
import java.awt.Point;
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.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
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 Ramka extends JFrame  implements ActionListener{
	
	private static int y;
	JComboBox<String> lista;
	JLabel tekst;
	JPanel panel;
	JFreeChart w;
	Component chartPanel;
	ArrayList<Dane> lista2 = new ArrayList<Dane>();
	double a;
	double b;
	double c;
	double d;
	double f;
	double g;
	double h;
	double i;
	double j;
	double k;
	double l;
	double m;
	XYSeriesCollection akcje;

	public Ramka(){
		
		load(lista2);
		setTitle("Notowanie akcji giełdowych");
		setSize(1000,700);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		tekst = new JLabel("Notowanie akcji giełdowych");
        tekst.setFont(new Font("Serif", Font.PLAIN, 20));
        tekst.setBounds(0, 300, 400, 20);
        
        lista = new JComboBox<String>();
        for (int p = 0; p < lista2.size(); p++){
        	lista.addItem(lista2.get(p).getnazwa());
        }
		lista.addActionListener(this);
		lista.setBounds(800,0, 100, 50);
	
		panel = new JPanel();
		akcje = new XYSeriesCollection();
		XYSeries serie1 = new XYSeries("Akcje");
		Dane firstData = lista2.get(0);
		
		for (Point el : firstData.getpoints()){
			serie1.add(el.x, el.y);
        }
		akcje.addSeries(serie1);
		
		XYSeries serie2 = new XYSeries("Średnia krocząca");
		serie2.add(2, (a+b+c)/3);
		serie2.add(3, (b+c+d)/3);
		serie2.add(4, (c+d+f)/3);
		serie2.add(5, (d+f+g)/3);
		serie2.add(6, (f+g+h)/3);
		serie2.add(7, (g+h+i)/3);
		serie2.add(8, (h+i+j)/3);
		serie2.add(9, (i+j+k)/3);
		serie2.add(10, (j+k+l)/3);
		serie2.add(11, (k+l+m)/3);
		
		XYSeries serie3 = new XYSeries("Trend");
		double n=((a+b+c+d+f+g+h+i+j+k+l+m)/12);
		double o=(78/12);
		
		serie3.add(1, (((a-n)*(1-o)+(b-n)*(2-o)+(c-n)*(3-o)+(d-n)*(4-o)+(f-n)*(5-o)+(g-n)*(6-o)+(h-n)*(7-o)+(i-n)*(8-o)+
				(j-n)*(9-o)+(k-n)*(10-o)+(l-n)*(11-o)+(m-n)*(12-o))/((1-o)*(1-o)+(2-o)*(2-o)+(3-o)*(3-o)+(4-o)*(4-o)+
				(5-o)*(5-o)+(6-o)*(6-o)+(7-o)*(7-o)+(8-o)*(8-o)+(9-o)*(9-o)+(10-o)*(10-o)+(11-o)*(11-o)+
				(12-o)*(12-o)))*1+(n)-(((a-n)*(1-o)+(b-n)*(2-o)+(c-n)*(3-o)+(d-n)*(4-o)+(f-n)*(5-o)+(g-n)*(6-o)+
				(h-n)*(7-o)+(i-n)*(8-o)+(j-n)*(9-o)+(k-n)*(10-o)+(l-n)*(11-o)+(m-n)*(12-o))/((1-o)*(1-o)+
				(2-o)*(2-o)+(3-o)*(3-o)+(4-o)*(4-o)+(5-o)*(5-o)+(6-o)*(6-o)+(7-o)*(7-o)+(8-o)*(8-o)+(9-o)*(9-o)+
				(10-o)*(10-o)+(11-o)*(11-o)+(12-o)*(12-o)))*o);
		
		serie3.add(12, (((a-n)*(1-o)+(b-n)*(2-o)+(c-n)*(3-o)+(d-n)*(4-o)+(f-n)*(5-o)+(g-n)*(6-o)+(h-n)*(7-o)+(i-n)*(8-o)+
				(j-n)*(9-o)+(k-n)*(10-o)+(l-n)*(11-o)+(m-n)*(12-o))/((1-o)*(1-o)+(2-o)*(2-o)+(3-o)*(3-o)+(4-o)*(4-o)+
				(5-o)*(5-o)+(6-o)*(6-o)+(7-o)*(7-o)+(8-o)*(8-o)+(9-o)*(9-o)+(10-o)*(10-o)+(11-o)*(11-o)+
				(12-o)*(12-o)))*12+(n)-(((a-n)*(1-o)+(b-n)*(2-o)+(c-n)*(3-o)+(d-n)*(4-o)+(f-n)*(5-o)+(g-n)*(6-o)+
				(h-n)*(7-o)+(i-n)*(8-o)+(j-n)*(9-o)+(k-n)*(10-o)+(l-n)*(11-o)+(m-n)*(12-o))/((1-o)*(1-o)+
				(2-o)*(2-o)+(3-o)*(3-o)+(4-o)*(4-o)+(5-o)*(5-o)+(6-o)*(6-o)+(7-o)*(7-o)+(8-o)*(8-o)+(9-o)*(9-o)+
				(10-o)*(10-o)+(11-o)*(11-o)+(12-o)*(12-o)))*o);		
		
		akcje.addSeries(serie2);
		
		akcje.addSeries(serie3);
		
		w=ChartFactory.createXYLineChart(
				"XY Chart", "Czas", "Cena", akcje,
				PlotOrientation.VERTICAL, true, true, false);

		
		chartPanel = new ChartPanel(w);
		chartPanel.setBounds(400, 100, 600, 500);

        panel.add(tekst);
		panel.add(lista);
		panel.add(chartPanel, BorderLayout.SOUTH);
		add(panel);	
		
		
	}
	
	private static void load(ArrayList <Dane> lista2) {
		File file = new File("Dane.txt");
		FileReader freader =null ;
		try {
			freader = new FileReader(file);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		BufferedReader breader = new BufferedReader(freader);
		lista2.clear();
		String line;

		try {
			List<Point> points = new ArrayList<>();
			int position = 1;
            while ((line = breader.readLine()) != null) {
                if (line.equals("Akcja")) {
                    String nazwa = breader.readLine();
                    for (int p = 0; p<lista2.size(); p++)
                    	points.add(new Point(position, y));
                    	position++;
                    new Dane(nazwa, points);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			breader.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		 Object zrodlo = e.getSource();
		 if(zrodlo == lista){
             String wykres = (String) lista.getSelectedItem();
             for (int r = 0; r < lista2.size(); r++){
            	 if (wykres.equals(lista2.get(r).getnazwa())){
            		 Dane data = lista2.get(r);
            		 changeData(data);
            	 }
            	 }
             }
	}
	private void changeData(Dane data) {

		akcje.removeAllSeries();
		XYSeries serie1 = new XYSeries(data.getnazwa());
		List<Point> points = data.getpoints();
		for (Point el : points){
			serie1.add(el.x, el.y);
		}
		akcje.addSeries(serie1);
		
		XYSeries serie2 = new XYSeries("Średnia krocząca");
		serie2.add(2, (a+b+c)/3);
		serie2.add(3, (b+c+d)/3);
		serie2.add(4, (c+d+f)/3);
		serie2.add(5, (d+f+g)/3);
		serie2.add(6, (f+g+h)/3);
		serie2.add(7, (g+h+i)/3);
		serie2.add(8, (h+i+j)/3);
		serie2.add(9, (i+j+k)/3);
		serie2.add(10, (j+k+l)/3);
		serie2.add(11, (k+l+m)/3);
		akcje.addSeries(serie2);
		
		XYSeries serie3 = new XYSeries("Trend");
		double n=((a+b+c+d+f+g+h+i+j+k+l+m)/12);
		double o=(78/12);
		
		serie3.add(1, (((a-n)*(1-o)+(b-n)*(2-o)+(c-n)*(3-o)+(d-n)*(4-o)+(f-n)*(5-o)+(g-n)*(6-o)+(h-n)*(7-o)+(i-n)*(8-o)+
				(j-n)*(9-o)+(k-n)*(10-o)+(l-n)*(11-o)+(m-n)*(12-o))/((1-o)*(1-o)+(2-o)*(2-o)+(3-o)*(3-o)+(4-o)*(4-o)+
				(5-o)*(5-o)+(6-o)*(6-o)+(7-o)*(7-o)+(8-o)*(8-o)+(9-o)*(9-o)+(10-o)*(10-o)+(11-o)*(11-o)+
				(12-o)*(12-o)))*1+(n)-(((a-n)*(1-o)+(b-n)*(2-o)+(c-n)*(3-o)+(d-n)*(4-o)+(f-n)*(5-o)+(g-n)*(6-o)+
				(h-n)*(7-o)+(i-n)*(8-o)+(j-n)*(9-o)+(k-n)*(10-o)+(l-n)*(11-o)+(m-n)*(12-o))/((1-o)*(1-o)+
				(2-o)*(2-o)+(3-o)*(3-o)+(4-o)*(4-o)+(5-o)*(5-o)+(6-o)*(6-o)+(7-o)*(7-o)+(8-o)*(8-o)+(9-o)*(9-o)+
				(10-o)*(10-o)+(11-o)*(11-o)+(12-o)*(12-o)))*o);
		
		serie3.add(12, (((a-n)*(1-o)+(b-n)*(2-o)+(c-n)*(3-o)+(d-n)*(4-o)+(f-n)*(5-o)+(g-n)*(6-o)+(h-n)*(7-o)+(i-n)*(8-o)+
				(j-n)*(9-o)+(k-n)*(10-o)+(l-n)*(11-o)+(m-n)*(12-o))/((1-o)*(1-o)+(2-o)*(2-o)+(3-o)*(3-o)+(4-o)*(4-o)+
				(5-o)*(5-o)+(6-o)*(6-o)+(7-o)*(7-o)+(8-o)*(8-o)+(9-o)*(9-o)+(10-o)*(10-o)+(11-o)*(11-o)+
				(12-o)*(12-o)))*12+(n)-(((a-n)*(1-o)+(b-n)*(2-o)+(c-n)*(3-o)+(d-n)*(4-o)+(f-n)*(5-o)+(g-n)*(6-o)+
				(h-n)*(7-o)+(i-n)*(8-o)+(j-n)*(9-o)+(k-n)*(10-o)+(l-n)*(11-o)+(m-n)*(12-o))/((1-o)*(1-o)+
				(2-o)*(2-o)+(3-o)*(3-o)+(4-o)*(4-o)+(5-o)*(5-o)+(6-o)*(6-o)+(7-o)*(7-o)+(8-o)*(8-o)+(9-o)*(9-o)+
				(10-o)*(10-o)+(11-o)*(11-o)+(12-o)*(12-o)))*o);		
		akcje.addSeries(serie3);
	}
}

package ramka;

import java.awt.Point;
import java.util.ArrayList;
import java.util.List;

public class Dane {

    private String nazwa;
    private List<Point> points = new ArrayList<Point>();
   
    public Dane(String nazwa, List<Point> points)
    {
        this.nazwa = nazwa;
        this.points = points;
    }
    public void setnazwa(String nazwa) {
        this.nazwa = nazwa;
    }
    public String getnazwa() {
        return nazwa;
    }
    public void setpoints(List<Point> points) {
        this.points = points;
    }
    public List<Point> getpoints() {
        return points;
    }
    public void addpoint(Point y){
    	this.points.add(y);
    }
}

package ramka;

public class Aktywator {

	public static void main(String[] args) {
		
		Ramka mojaRamka = new Ramka();
		mojaRamka.setVisible(true);

	}
}

 

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