Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Java] opisać kod- rysowanie wykresów

bogatki 29 Maj 2008 14:38 9240 3
  • #1 29 Maj 2008 14:38
    bogatki
    Poziom 8  

    Linijka po linijce, albo ile kto wie.

    Code:

    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import javax.swing.*;
    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 misiek implements Runnable, ActionListener
    {
       JFrame ramka;
       JPanel panel;
       JComboBox combobox;
       JLabel label1, label2, label3, label4, label5, label6, wykres;
       JButton rysuj, czysc;
       JTextField textfield1, textfield2, textfield3, textfield4, textfield5;
       XYSeries series;
       XYSeriesCollection seriescollection;
       JFreeChart freechart;
       BufferedImage image;
             
       double a, b, c, x=0, bound1, bound2;
       int time=0;
       boolean draw=false;
       
       public misiek()
       {
          
          
          ramka=new JFrame("Wykresy");
          ramka.setLayout(null);
          ramka.setSize(1000,700);
          ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          
          //menu
          panel=new JPanel();
          panel.setLayout(new GridLayout(14,1));
          panel.setBackground(Color.LIGHT_GRAY);
          panel.setBounds(0,0,100,600);
          panel.setVisible(true);
          ramka.add(panel);
          
          rysuj=new JButton("rysuj");
          rysuj.addActionListener(this);
          panel.add(rysuj);   
          
          label1=new JLabel(" funkcja f(x)");
          panel.add(label1);
          
          combobox=new JComboBox();
          combobox.addItem("a*sin(bx)=0");
          combobox.addItem("a*cos(bx)=0");
          combobox.addItem("a*x^2+b*x+c=0");
          panel.add(combobox);

          label2=new JLabel(" kres dolny:");




          panel.add(label2);
          
          textfield1=new JTextField("0");
          panel.add(textfield1);
          
          label3=new JLabel(" kres górny:");
          panel.add(label3);
          
          textfield2=new JTextField("10");
          panel.add(textfield2);
          
          label4=new JLabel(" a");
          panel.add(label4);
          
          textfield3=new JTextField("1");
          panel.add(textfield3);
          
          label5=new JLabel(" b");
          panel.add(label5);
          
          textfield4=new JTextField("5");
          panel.add(textfield4);
          
          label6=new JLabel(" c");
          panel.add(label6);
          
          textfield5=new JTextField("10");
          panel.add(textfield5);
          
          czysc=new JButton("czysc");
          czysc.addActionListener(this);
          panel.add(czysc);   
          
          series=new XYSeries("");
          seriescollection=new XYSeriesCollection();
          freechart=ChartFactory.createXYLineChart(" ", "x", "f(x)", seriescollection, PlotOrientation.VERTICAL, true, true, false);   
          image=freechart.createBufferedImage(800, 500);
          
          
          //miejsce na wykres
          wykres=new JLabel();
          wykres.setIcon(new ImageIcon(image));
          wykres.setBounds(110, 10, 680, 580);
          ramka.add(wykres);      
          
          ramka.setVisible(true);
          ramka.requestFocus();
       }
       
       
       public void run()
       {
       x=bound1=Double.parseDouble(textfield1.getText());
       bound2=Double.parseDouble(textfield2.getText());
       while(draw==true)
          {
          try
             {
             Thread.sleep(10);
             }
          catch(InterruptedException exc)
             {
             return;
             }
          if(x<=bound2)
          {
          a=Double.parseDouble(textfield3.getText());
          b=Double.parseDouble(textfield4.getText());
          
          bound1=Double.parseDouble(textfield1.getText());
          bound2=Double.parseDouble(textfield2.getText());
          
          x=bound1+(double)time/20;
          
          if(combobox.getSelectedItem()=="a*sin(bx)=0")
             series.add(x, a*Math.sin(b*x));
          
          if(combobox.getSelectedItem()=="a*cos(bx)=0")
             series.add(x, a*Math.cos(b*x));
          
          if(combobox.getSelectedItem()=="a*x^2+b*x+c=0")
             series.add(x, a*x*x+b*x+c);
          
          seriescollection.removeAllSeries();
          seriescollection.addSeries(series);
          freechart=ChartFactory.createXYLineChart(" ", "x", "f(x)", seriescollection, PlotOrientation.VERTICAL, false, false, false);
          image=freechart.createBufferedImage(800, 500);
          wykres.setIcon(new ImageIcon(image));
          time++;
          }
          else
             {
             draw=false;
             }
          }
       }
          
       public void actionPerformed(ActionEvent e)
       {
       if(e.getActionCommand()=="czysc")
          {
          draw=false;
          time=0;
          series.clear();
          seriescollection.removeAllSeries();
          freechart=ChartFactory.createXYLineChart(" ", "x", "f(x)", seriescollection, PlotOrientation.VERTICAL, true, true, false);
          image=freechart.createBufferedImage(800, 500);
          wykres.setIcon(new ImageIcon(image));
          }
       if(e.getActionCommand()=="rysuj")
       {
       draw=true;
       Thread t=new Thread(this);
       t.start();
       }
       
       }


    }

    0 3
  • #3 29 Maj 2008 15:13
    fantom
    Poziom 31  

    bogatki napisał:
    Linijka po linijce, albo ile kto wie.


    He, he dobre ;-). No to ja moze zaproponuje ci cos innego - sprobuj sam cos zaanalizowac a jak bedziesz mial problemy z czyms naprawde trudnym to wtedy sie pytaj. Ja moge ci oppowiedziec ogolnie co sie dzieje. W kontruktorze klasy misiek tworzone jest cale GUI (przyciski i inne pierdoly). Nastepnie po nacisnieciu ktoregos przycisku wywolywane jest actionPerformed (wczesniej w kontruktorze zostal podczepiony listener do tych przyciskow-implementacja intefejsu ActionListener) ktora z kolei startuje watek zaimplementowany w tej samej klasie (metoda run-implementacja interfejsu Runnable). Po starcie tego watku metoda run chodzi w kolko i tam odbywa sie faktyczne rysowanie wybranego z pomoca przycisku wykresu.

    0
  • #4 29 Maj 2008 17:27
    charm_spider
    Poziom 21  

    Kolego bogatki: nie rozwiązujemy tutaj za nikogo zadań domowych. Pomagamy, ale nie robimy wszystkiego za kogoś.

    Zamykam temat.

    0