Witam,
kod, który umieszczę jest obsługiwany przez bibliotekę JFreeChart. Mam problem z odświeżaniem panelu rysującego wykres. Stworzyłem kod, który rysuje funkcję kwadratową dla dowolnego a, b i c. Wszystko działa, no ale. Kiedy próbuję narysować wykres ponownie łączy się tak jakby z poprzednim wykresem czyli rysuje linie proste od punktów jednego wykresu do punktów drugiego wykresu:
[IMG]http://i43.tinypic.com/9likx0.png[/IMG]
zdjęcie drugie:
[IMG]http://i41.tinypic.com/35bb3wo.png[/IMG]
A tutaj kod programu: (może się kiedyś komuś przyda)
import java.awt.Font;
import java.awt.Color;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.IOException;
import javax.swing.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
public class Kalkulator_Graficzny extends JFrame{
double x = -48.5;
double y = 0;
double a = 0;
double b = 0;
double c = 0;
int i;
int x_ramki;
int y_ramki;
String a_tekst, b_tekst, c_tekst;
private JMenu jmenuHelp, jmenuPrzelacz;
private JMenuItem jmenuitemAbout, jmenuitemKalkulator;
Font f12 = new Font("Times New Roman", 0, 12);
Font f121 = new Font("Times New Roman", 1, 12);
XYSeriesCollection dataset = new XYSeriesCollection();
JFreeChart chart = ChartFactory.createXYLineChart("", "\n"+"", "", dataset, PlotOrientation.VERTICAL, true, true, false);
ChartPanel frame = new ChartPanel(chart);
XYSeries series = new XYSeries("");
JPanel panel_liczb = new JPanel();
JTextField a_field = new JTextField("0");
JTextField b_field = new JTextField("0");
JTextField c_field = new JTextField("0");
JLabel a_label = new JLabel("x^2");
JLabel b_label = new JLabel(" x");
JLabel c_label = new JLabel("+");
JButton przycisk = new JButton("Narysuj wykres");
JButton przycisk2 = new JButton("czysc");
public void Kalkulator_Graficzny() {
jmenuHelp = new JMenu("Pomoc");
jmenuHelp.setFont(f121);
jmenuHelp.setMnemonic(KeyEvent.VK_H);
jmenuitemAbout = new JMenuItem("O kalkulatorze graficznym");
jmenuitemAbout.setFont(f12);
jmenuHelp.add(jmenuitemAbout);
jmenuPrzelacz = new JMenu("Przełącz");
jmenuPrzelacz.setFont(f121);
jmenuPrzelacz.setMnemonic(KeyEvent.VK_H);
jmenuitemKalkulator = new JMenuItem("Kalkulator");
jmenuitemKalkulator.setFont(f12);
jmenuPrzelacz.add(jmenuitemKalkulator);
JMenuBar mb = new JMenuBar();
mb.add(jmenuHelp);
mb.add(jmenuPrzelacz);
setLayout(null);
frame.setLayout(null);
add(frame);
frame.setBounds(0,0,408,255);
panel_liczb.setLayout(null);
panel_liczb.setBackground(Color.white);
frame.add(panel_liczb);
panel_liczb.add(a_field);
panel_liczb.add(b_field);
panel_liczb.add(c_field);
panel_liczb.add(a_label);
panel_liczb.add(b_label);
panel_liczb.add(c_label);
panel_liczb.add(przycisk);
panel_liczb.setBounds(50,180,340,40);
a_field.setBounds(0,10,25,20);
b_field.setBounds(50,10,25,20);
c_field.setBounds(100,10,25,20);
///////////////////////////////////
a_label.setBounds(25,10,25,20);
b_label.setBounds(75,10,25,20);
c_label.setBounds(90,10,25,20);
przycisk.setBounds(140,5,170,30);
przycisk.addMouseListener(new java.awt.event.MouseAdapter()
{
public void mouseClicked(java.awt.event.MouseEvent evt)
{
a_tekst = a_field.getText();
b_tekst = b_field.getText();
c_tekst = c_field.getText();
a = Double.parseDouble(a_tekst);
b = Double.parseDouble(b_tekst);
c = Double.parseDouble(c_tekst);
dataset.removeAllSeries();
for(i = 0; i<200; i++)
{
y = a*x*x + b*x + c;
series.add(x, y);
x = x + 0.5;
}
x = -48.5;
y = 0;
i = 0;
dataset.addSeries(series);
}
});
pack();
setTitle("Kalkulator");
setSize(408, 270);
setLocation(405, 255);
setVisible(true);
setResizable(true);
setJMenuBar(mb);
jmenuitemKalkulator.addMouseListener(new java.awt.event.MouseAdapter()
{
public void mousePressed(java.awt.event.MouseEvent evt)
{
}
});
}
}
Panel dolny nachodzi na rysowanie, ale to jest wynik moich prób i na razie nie zmieniałem tego, bo to nie przeszkadza w działaniu programu.
Najgorsze jest to, że metoda dataset.removeAllSeries(); nie działa, albo ją w złym miejscu wstawiłem.