Zmiana ciągła w BufferedImage

0

W programie chodzi o to, żeby wyświetlał odpowiedni wykres w zależności od ustawienia JScrollBarów. Moje główne pytanie brzmi jak zrobić, żeby ten właśnie wykres zmieniał się na bieżąco ze zmianą wartości dla JScroolBarów? Poza tym nie potrzebuję oznaczeń na osiach, stąd drugie pytanie jak je usunąć?
W programie panuje trochę chaosu za co z góry przepraszam.

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.JScrollBar;

import org.jfree.chart.ChartFactory;
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 Pro extends JFrame implements WindowListener, ActionListener, AdjustmentListener{

	JMenuItem newItem=new JMenuItem("New"), saveItem=new JMenuItem("Save"), exitItem=new JMenuItem("Exit");
	JMenuItem infoItem=new JMenuItem("O zjawisku"), autorItem=new JMenuItem("O autorach");
	JPanel pright;
	PanelDoRysowania pleft;
	JScrollBar sc1, sc2, sc3, sc4, sc5;
	JLabel e, e1, e2, e3, e4, e5;
	BufferedImage image;
	Graphics2D g2im;
	JLabel wykres;
	XYSeries series;
    XYSeriesCollection seriescollection;
    JFreeChart jfreechart;
    boolean draw = false;
    double x = 0, poczatek, koniec;
    int time = 0;
    JFreeChart w;
    
    double d=0.00002;
	double a=0.000001;
	double pi=3.14;
	int N=1;
	double L=100;
	double lambda=0.00000038;
	double k=0.01745;
	double xx=0, yy=0;
	double s1=0,s2=0,s3=0,M=0;
	
	public Pro() throws HeadlessException {

		super();
		setTitle("Dyfrakcja i interferencja");
        setSize(900,600);
        setResizable(true);
		
        JMenuBar menuBar=new JMenuBar();
        JMenu fileMenu=new JMenu("File"), infoMenu=new JMenu("Info");   
        menuBar.add(fileMenu);
        menuBar.add(infoMenu);
        fileMenu.add(newItem);
        fileMenu.add(saveItem);
        fileMenu.add(exitItem);
        infoMenu.add(infoItem);
        infoMenu.add(autorItem);
        JRootPane root=getRootPane();
        root.setJMenuBar(menuBar);
        setLayout(new BorderLayout());
        pleft=new PanelDoRysowania();
        pright=new JPanel();
        pright=doPanel();
        add(pleft, BorderLayout.WEST);
        add(pright, BorderLayout.EAST);
                
		newItem.addActionListener(this);
		saveItem.addActionListener(this);
		exitItem.addActionListener(this);
		infoItem.addActionListener(this);
		autorItem.addActionListener(this);		
		
		setVisible(true);
		  
       
	}

	public Pro(GraphicsConfiguration arg0) {
		super(arg0);
		// TODO Auto-generated constructor stub
	}

	public Pro(String arg0) throws HeadlessException {
		super(arg0);
		// TODO Auto-generated constructor stub
	}

	public Pro(String arg0, GraphicsConfiguration arg1) {
		super(arg0, arg1);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		Object source=e.getSource();
		if(source==newItem){
			sc1.setValue(380);
			sc2.setValue(20);
			sc3.setValue(1);
			sc4.setValue(1);
			sc5.setValue(100);
		}
		if(source==saveItem){
			try {
			ImageIO.write( image, "jpeg", new File ( "im.jpg" ) );
			}
			catch (IOException e1) {
			e1.printStackTrace();
			System.out.println("Blad przy zapisywaniu obrazku do pliku");
			System.exit(1);
			}
			JOptionPane.showMessageDialog(this,"Zapisano jako:\n im.jpg");
		}
		if(source==exitItem){
			System.exit(0);
		}
		if(source==infoItem){
			Okno okno = new Okno();
			okno.setVisible(true);
		}
		if(source==autorItem){
			JOptionPane.showMessageDialog(this,"Autorki:\n Katarzyna Mazur\n Magdalena Owerko");
		}
	}

	@Override
	public void windowActivated(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowClosed(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowClosing(WindowEvent arg0) {
		// TODO Auto-generated method stub
		System.exit(0);
	}

	@Override
	public void windowDeactivated(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowDeiconified(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowIconified(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowOpened(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	
	public JPanel doPanel()
    {
		JPanel panel=new JPanel();
		ImageIcon obrazek = new ImageIcon("tecza.jpg");
		panel.setSize(350,600);
		
		sc1=new JScrollBar(JScrollBar.HORIZONTAL, 380, 10, 380, 770); 
		sc2=new JScrollBar(JScrollBar.HORIZONTAL,20,1,20,41); 
		sc3=new JScrollBar(JScrollBar.HORIZONTAL,1,1,1,11);
		sc4=new JScrollBar(JScrollBar.HORIZONTAL,1,1,1,11); 
		sc5=new JScrollBar(JScrollBar.HORIZONTAL,100,10,100,210);
		sc1.setPreferredSize(new Dimension(300,10));
		sc2.setPreferredSize(new Dimension(300,10));
		sc3.setPreferredSize(new Dimension(300,10));
		sc4.setPreferredSize(new Dimension(300,10));
		sc5.setPreferredSize(new Dimension(300,10));
		sc1.addAdjustmentListener(this);
		sc2.addAdjustmentListener(this);
		sc3.addAdjustmentListener(this);
		sc4.addAdjustmentListener(this);
		sc5.addAdjustmentListener(this);
		e=new JLabel("Opcje:");
		e1=new JLabel("Dlugosc fali: "+sc1.getMinimum()+" [nanometrow]");
		e2=new JLabel("Stala siatki: "+sc2.getMinimum()+" [mikrometrow]");
		e3=new JLabel("Szerokosc szczelin: "+sc3.getMinimum()+" [mikrometrow]");
		e4=new JLabel("Ilosc szczelin: "+sc4.getMinimum());
		e5=new JLabel("Odległosc siatki od ekranu: "+sc5.getMinimum()+" [metrow]");

		panel.setLayout(new GridLayout(12,1));	
		panel.add(e);
		JLabel etykieta2 = new JLabel();		
		etykieta2.setIcon(obrazek);
		panel.add(etykieta2);
		panel.add(sc1);
		panel.add(e1);
		panel.add(sc2);
		panel.add(e2);
		panel.add(sc3);
		panel.add(e3);
		panel.add(sc4);
		panel.add(e4);
		panel.add(sc5);
		panel.add(e5);	
		
		return panel;
    }
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Pro a=new Pro();
	}

	@Override
	public void adjustmentValueChanged(AdjustmentEvent e) {
		// TODO Auto-generated method stub
		int i =e.getValue();
		if(e.getSource()==sc1){
			e1.setText("Dlugosc fali: "+i+" [nanometrow]");
			lambda=i;
			 		}
		if(e.getSource()==sc2){
			e2.setText("Stala siatki: "+i+" [mikrometrow]");
			d=i;
				}
		if(e.getSource()==sc3){
			e3.setText("Szerokosc szczelin: "+i+" [mikrometrow]");
			a=i;
		}
		if(e.getSource()==sc4){
			e4.setText("Ilosc szczelin: "+i);
			N=i;
		}
		if(e.getSource()==sc5){
			e5.setText("Odległosc siatki od ekranu: "+i+" [centymetrow]");
			L=i;
		}
	}
	
	class PanelDoRysowania extends JPanel implements ActionListener
	{
		public PanelDoRysowania() 
		{
			    
				XYSeries series = new XYSeries("XYGraph");
				
				
				for(int m=-300;m<301;m++){
					xx=m*a*L/(100*d);
					s1=Math.sin(k*pi*N*m);
					s2=Math.sin(k*pi*a*m/d);
					s3=Math.sin(k*pi*m);
					M=pi*a*m/d;
					yy=s1*s1*s2*s2/(M*M*s3*s3);
					
					series.add(xx, yy);				
				}

				
				XYSeriesCollection dataset = new XYSeriesCollection();
				dataset.addSeries(series);
				w=ChartFactory.createXYLineChart("", "", "", dataset,PlotOrientation.VERTICAL, false, false, false);
				// Dodawanie wykresu jako obraz - klasa BufferedImage 
		        BufferedImage image = w.createBufferedImage(500,200);
		        JLabel lblChart = new JLabel();        
		        lblChart.setIcon(new ImageIcon(image));
		        add(lblChart);
				
		}  
	public void run() {
        // TODO Auto-generated method stub
	}
	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	}}


1

zrób coś w stylu :

public class TEMP extends JFrame {

    JScrollBar scrBar = new JScrollBar();
    JPanel pan1 = new JPanel();
    JPanel pan2 = new Pan1(100);
    JButton b = new JButton();

    public TEMP() throws HeadlessException {

        setLayout(new GridLayout(0, 1));
        add(pan1);
        add(pan2);
        pan1.add(scrBar);

        scrBar.addAdjustmentListener(new AdjustmentListener() {

            @Override
            public void adjustmentValueChanged(AdjustmentEvent e) {
                ((Pan1) pan2).setScrPosition(e.getValue());
                pan2.repaint();
                pan2.revalidate();

            }
        });
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame fr = new TEMP();
                fr.setSize(500, 500);
                fr.setVisible(true);
                fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            }
        });
    }
}

class Pan1 extends JPanel {

    int scrPosition = 50;

    public void setScrPosition(int scrPosition) {
        this.scrPosition = scrPosition;
    }

    public Pan1(int pos) {
        this.scrPosition = pos;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.red);
        g.drawLine(0, 0, scrPosition, this.getHeight());

    }
}
 
0

Trochę zmieniona wersja, wzorowana na podpowiedzi remigio. Tylko tnie się bardzo. Może ktoś wie dlaczego?
Poza tym co zrobić, żeby poprzedni wykres znikał?

Zamieszczam updatowany kod:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.JScrollBar;

import org.jfree.chart.ChartFactory;
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 Pro extends JFrame implements WindowListener, ActionListener, AdjustmentListener{

	JMenuItem newItem=new JMenuItem("New"), saveItem=new JMenuItem("Save"), exitItem=new JMenuItem("Exit");
	JMenuItem infoItem=new JMenuItem("O zjawisku"), autorItem=new JMenuItem("O autorach");
	JPanel pright;
	PanelDoRysowania pleft;
	JScrollBar sc1, sc2, sc3, sc4, sc5;
	JLabel e, e1, e2, e3, e4, e5;
	BufferedImage image;
	Graphics2D g2im;
	JLabel wykres;
    XYSeriesCollection seriescollection;
    JFreeChart jfreechart;
    boolean draw = false;
    double x = 0, poczatek, koniec;
    int time = 0;
    JFreeChart w;
    
    double d=0.00002;
	double a=0.000001;
	double pi=3.14;
	int N=1;
	double L=100;
	double lambda=0.00000038;
	double k=0.01745;
	double xx=0, yy=0;
	double s1=0,s2=0,s3=0,M=0;
	
	XYSeries series = new XYSeries("XYGraph");
	JLabel lblChart = new JLabel();
	
	public Pro() throws HeadlessException {

		super();
		setTitle("Dyfrakcja i interferencja");
        setSize(900,600);
        setResizable(true);
		
        JMenuBar menuBar=new JMenuBar();
        JMenu fileMenu=new JMenu("File"), infoMenu=new JMenu("Info");   
        menuBar.add(fileMenu);
        menuBar.add(infoMenu);
        fileMenu.add(newItem);
        fileMenu.add(saveItem);
        fileMenu.add(exitItem);
        infoMenu.add(infoItem);
        infoMenu.add(autorItem);
        JRootPane root=getRootPane();
        root.setJMenuBar(menuBar);
        setLayout(new BorderLayout());
        pleft=new PanelDoRysowania();
        pright=new JPanel();
        pright=doPanel();
        add(pleft, BorderLayout.WEST);
        add(pright, BorderLayout.EAST);
                
		newItem.addActionListener(this);
		saveItem.addActionListener(this);
		exitItem.addActionListener(this);
		infoItem.addActionListener(this);
		autorItem.addActionListener(this);		
		
		setVisible(true);
		  
       
	}

	public Pro(GraphicsConfiguration arg0) {
		super(arg0);
		// TODO Auto-generated constructor stub
	}

	public Pro(String arg0) throws HeadlessException {
		super(arg0);
		// TODO Auto-generated constructor stub
	}

	public Pro(String arg0, GraphicsConfiguration arg1) {
		super(arg0, arg1);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		Object source=e.getSource();
		if(source==newItem){
			sc1.setValue(380);
			sc2.setValue(20);
			sc3.setValue(1);
			sc4.setValue(1);
			sc5.setValue(100);
		}
		if(source==saveItem){
			try {
			ImageIO.write( image, "jpeg", new File ( "im.jpg" ) );
			}
			catch (IOException e1) {
			e1.printStackTrace();
			System.out.println("Blad przy zapisywaniu obrazku do pliku");
			System.exit(1);
			}
			JOptionPane.showMessageDialog(this,"Zapisano jako:\n im.jpg");
		}
		if(source==exitItem){
			System.exit(0);
		}
		if(source==infoItem){
			Okno okno = new Okno();
			okno.setVisible(true);
		}
		if(source==autorItem){
			JOptionPane.showMessageDialog(this,"Autorki:\n Katarzyna Mazur\n Magdalena Owerko");
		}
	}

	@Override
	public void windowActivated(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowClosed(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowClosing(WindowEvent arg0) {
		// TODO Auto-generated method stub
		System.exit(0);
	}

	@Override
	public void windowDeactivated(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowDeiconified(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowIconified(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowOpened(WindowEvent arg0) {
		// TODO Auto-generated method stub
		
	}
	
	public JPanel doPanel()
    {
		JPanel panel=new JPanel();
		ImageIcon obrazek = new ImageIcon("tecza.jpg");
		panel.setSize(350,600);
		
		sc1=new JScrollBar(JScrollBar.HORIZONTAL, 380, 10, 380, 770); 
		sc2=new JScrollBar(JScrollBar.HORIZONTAL,20,1,20,41); 
		sc3=new JScrollBar(JScrollBar.HORIZONTAL,1,1,1,11);
		sc4=new JScrollBar(JScrollBar.HORIZONTAL,1,1,1,11); 
		sc5=new JScrollBar(JScrollBar.HORIZONTAL,100,10,100,210);
		sc1.setPreferredSize(new Dimension(300,10));
		sc2.setPreferredSize(new Dimension(300,10));
		sc3.setPreferredSize(new Dimension(300,10));
		sc4.setPreferredSize(new Dimension(300,10));
		sc5.setPreferredSize(new Dimension(300,10));
		sc1.addAdjustmentListener(this);
		sc2.addAdjustmentListener(this);
		sc3.addAdjustmentListener(this);
		sc4.addAdjustmentListener(this);
		sc5.addAdjustmentListener(this);
		e=new JLabel("Opcje:");
		e1=new JLabel("Dlugosc fali: "+sc1.getMinimum()+" [nanometrow]");
		e2=new JLabel("Stala siatki: "+sc2.getMinimum()+" [mikrometrow]");
		e3=new JLabel("Szerokosc szczelin: "+sc3.getMinimum()+" [mikrometrow]");
		e4=new JLabel("Ilosc szczelin: "+sc4.getMinimum());
		e5=new JLabel("Odległosc siatki od ekranu: "+sc5.getMinimum()+" [metrow]");

		panel.setLayout(new GridLayout(12,1));	
		panel.add(e);
		JLabel etykieta2 = new JLabel();		
		etykieta2.setIcon(obrazek);
		panel.add(etykieta2);
		panel.add(sc1);
		panel.add(e1);
		panel.add(sc2);
		panel.add(e2);
		panel.add(sc3);
		panel.add(e3);
		panel.add(sc4);
		panel.add(e4);
		panel.add(sc5);
		panel.add(e5);	
		
		return panel;
    }
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Pro a=new Pro();
	}

	@Override
	public void adjustmentValueChanged(AdjustmentEvent e) {
		// TODO Auto-generated method stub
		int i =e.getValue();
		if(e.getSource()==sc1){
			e1.setText("Dlugosc fali: "+i+" [nanometrow]");
			lambda=i;
			pleft.repaint();
            pleft.revalidate();
			 		}
		if(e.getSource()==sc2){
			e2.setText("Stala siatki: "+i+" [mikrometrow]");
			d=i;
			pleft.repaint();
            pleft.revalidate();
				}
		if(e.getSource()==sc3){
			e3.setText("Szerokosc szczelin: "+i+" [mikrometrow]");
			a=i;
			pleft.repaint();
            pleft.revalidate();
		}
		if(e.getSource()==sc4){
			e4.setText("Ilosc szczelin: "+i);
			N=i;
			pleft.repaint();
            pleft.revalidate();
		}
		if(e.getSource()==sc5){
			e5.setText("Odległosc siatki od ekranu: "+i+" [centymetrow]");
			L=i;
			pleft.repaint();
            pleft.revalidate();
		}
	}
	
	class PanelDoRysowania extends JPanel 
	{
		public PanelDoRysowania() 
		{}
			    
				
		        protected void paintComponent(Graphics g) {
		            super.paintComponent(g);
		            				
					for(int m=-300;m<301;m++){
						xx=m*a*L/(100*d);
						s1=Math.sin(k*pi*N*m);
						s2=Math.sin(k*pi*a*m/d);
						s3=Math.sin(k*pi*m);
						M=pi*a*m/d;
						yy=s1*s1*s2*s2/(M*M*s3*s3);						
						series.add(xx, yy);				
					}

					
					XYSeriesCollection dataset = new XYSeriesCollection();
					dataset.addSeries(series);
					w=ChartFactory.createXYLineChart("", "", "", dataset,PlotOrientation.VERTICAL, false, false, false);
					// Dodawanie wykresu jako obraz - klasa BufferedImage 
			        BufferedImage image = w.createBufferedImage(500,200);
			                
			        lblChart.setIcon(new ImageIcon(image));
			        add(lblChart);
		        }	
		 
	}
	}


2
  1. Musisz czyścić kolekcję, przed nowym wykresem dodaj
series.clear();
  1. Po co Ci WindowsListener i mnóstwo pustych metod? Wywal wszystkie i dopisz do konstruktora klasy Pro jeden wiersz
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  1. Koniecznie musi się zmieniać wykres podczas przesuwania suwaka? Może starczy by zmienił się po puszczeniu suwaka?
        @Override
        public void adjustmentValueChanged(AdjustmentEvent e) {
                if(((JScrollBar)e.getSource()).getValueIsAdjusting())
                {
                    return;
                }
                ...
1

Robicie wiele niepotrzebnych rzeczy w metodzie paintComponent(), co strasznie zamula program.
Lista zmian:
-nowe pole w klasie Pro

    XYSeries series = new XYSeries("XYGraph");
    XYSeriesCollection dataset = new XYSeriesCollection();
    JLabel lblChart = new JLabel();

-zmiana w konstruktorze

        autorItem.addActionListener(this); 
        w=ChartFactory.createXYLineChart("", "", "", dataset,PlotOrientation.VERTICAL, false, false, false);
                                        // Dodawanie wykresu jako obraz - klasa BufferedImage 
        BufferedImage image = w.createBufferedImage(500,200);
 
        lblChart.setIcon(new ImageIcon(image));         
 
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);

-zmiana metody adjustmentValueChanged()

    public void adjustmentValueChanged(AdjustmentEvent e) 
    {
        if(((JScrollBar)e.getSource()).getValueIsAdjusting())
        {
            return;
        }
        int i =e.getValue();
        if(e.getSource()==sc1)
        {
            e1.setText("Dlugosc fali: "+i+" [nanometrow]");
            lambda=i;
        }
        if(e.getSource()==sc2)
        {
            e2.setText("Stala siatki: "+i+" [mikrometrow]");
            d=i;
        }
        if(e.getSource()==sc3)
        {
            e3.setText("Szerokosc szczelin: "+i+" [mikrometrow]");
            a=i;
        }
        if(e.getSource()==sc4)
        {
            e4.setText("Ilosc szczelin: "+i);
            N=i;
        }
        if(e.getSource()==sc5)
        {
            e5.setText("Odległosc siatki od ekranu: "+i+" [centymetrow]");
            L=i;
        }
            
        series.clear();
 
        for(int m=-300;m<301;m++)
        {
            xx=m*a*L/(100*d);
            s1=Math.sin(k*pi*N*m);
            s2=Math.sin(k*pi*a*m/d);
            s3=Math.sin(k*pi*m);
            M=pi*a*m/d;
            yy=s1*s1*s2*s2/(M*M*s3*s3);                                                
            series.add(xx, yy);                                
        }
        dataset.removeAllSeries();                                  
        dataset.addSeries(series);
        w=ChartFactory.createXYLineChart("", "", "", dataset,PlotOrientation.VERTICAL, false, false, false);
                                        // Dodawanie wykresu jako obraz - klasa BufferedImage 
        BufferedImage image = w.createBufferedImage(500,200);
 
        lblChart.setIcon(new ImageIcon(image));        
        pleft.repaint(); 
    }

-zmiana metody paintComponent()

        public void paintComponent(Graphics g) 
        {
            super.paintComponent(g);
            add(lblChart);     
        }

I program nadaje się do użytku.

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