wykres...

0

Ja chciałem ponowić moje zapytanie odnośnie wykresu....
Chciałem stworzyć wykres.
Zrobiłem Jframe i wrzuciłem do niego panel.
Panel rozszerzam w takie sposób

 JPanel p1 = new JPanel() {

        public void paint(Graphics g) {
            super.paint(g);
            // i tutaj kod
            }
        }
    };

Mam także dane w arraylist które zawierają wartości short. jak mam narysować taki wykres.
Jak wrzucam do metody paint :

for (int i = 0; i< 20; i++){
g.drawLine(0,(Math.round(list.get(i)/100)), x1, y1);
}
to panel gdzieś mi ucieka :/ po prostu znika...
Wiem że powyższa pętla for nie narysuje mi żadnego wykresu.
Po prostu chciałem coś wrzucić żeby rysowało...
Może ktoś zna jakieś ciekawe strony tudzież przykładowe programy...

Pozdrawiam

0

Masz przykład

/*  Program rysujący losową łamaną, wykorzystany jest javax.swing.Timer, co 0,1 sekundy dodawany jest kolejny segment łamanej
 */
import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.io.*;

public class Odcinki extends JFrame implements ActionListener
{
    protected ArrayList<Line2D.Float> segmenty=new ArrayList<Line2D.Float>();
    private JButton lamana;
    private JButton odcinki;
    private JButton stop;
    private JButton save;
    private JButton wymaz;
    private JButton wykres;
    private boolean czyLamana=true;
    private Point2D.Float begin;
    private javax.swing.Timer timer;
    protected int[] wyniki=new int[1001];
    private JFileChooser fc=new JFileChooser(".");
    private RamkaWykresuOdcinkow oknoWykresu;
    //------------------------
    public static void main(String[] args)
    {
        new Odcinki();
    }
    //------------------------
    public Odcinki()
    {
        JToolBar tb=new JToolBar();
        odcinki=new JButton(new ImageIcon("resources/Play.gif"));
        odcinki.setToolTipText("Odcinki");
        odcinki.addActionListener(this);
        tb.add(odcinki);

        tb.addSeparator();

        lamana=new JButton(new ImageIcon("resources/Play.gif"));
        lamana.setToolTipText("Łamana");
        lamana.addActionListener(this);
        tb.add(lamana);

        tb.addSeparator();

        save=new JButton(new ImageIcon("resources/Save.gif"));
        save.setToolTipText("Zapisanie wyników");
        save.addActionListener(this);
        save.setEnabled(false);
        tb.add(save);

        tb.addSeparator();

        stop=new JButton(new ImageIcon("resources/Stop.gif"));
        stop.setToolTipText("Zatrzymanie");
        stop.addActionListener(this);
        stop.setEnabled(false);
        tb.add(stop);

        tb.addSeparator();

        wykres=new JButton(new ImageIcon("resources/Fast.gif"));
        wykres.setToolTipText("Sporządzenie wykresu");
        wykres.addActionListener(this);
        wykres.setEnabled(false);
        tb.add(wykres);

        tb.addSeparator();

        wymaz=new JButton(new ImageIcon("resources/Refresh.gif"));
        wymaz.setToolTipText("Wymazanie");
        wymaz.addActionListener(this);
        wymaz.setEnabled(false);
        tb.add(wymaz);

        add(tb,BorderLayout.NORTH);

        add(new PanelOdcinkow(this),BorderLayout.CENTER);

        final Random r=new Random();
        timer=new javax.swing.Timer(100, new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                if(segmenty.size()==0 || !czyLamana)
                {
                    begin=new Point2D.Float(400*r.nextFloat(),300*r.nextFloat());
                }
                Point2D.Float end=new Point2D.Float(400*r.nextFloat(),300*r.nextFloat());;
                Line2D.Float l=new Line2D.Float(begin,end);
                for(int i=(int)Math.ceil(begin.getX()*2.5);i<=(int)Math.floor(end.getX()*2.5);i++)
                    wyniki[i]++;
                segmenty.add(l);
                begin=end;
                repaint();
            }
        });

        pack();
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        oknoWykresu=new RamkaWykresuOdcinkow(this);
    }
    //------------------------
    public void actionPerformed(ActionEvent ae)
    {
        JButton b=(JButton)(ae.getSource());
        if(b==lamana)
        {
            lamana.setEnabled(false);
            odcinki.setEnabled(false);
            stop.setEnabled(true);
            save.setEnabled(false);
            wymaz.setEnabled(false);
            wykres.setEnabled(false);
            timer.start();
        }
        if(b==odcinki)
        {
            czyLamana=false;
            lamana.setEnabled(false);
            odcinki.setEnabled(false);
            stop.setEnabled(true);
            save.setEnabled(false);
            wymaz.setEnabled(false);
            wykres.setEnabled(false);
            timer.start();
        }
        if(b==stop)
        {
            lamana.setEnabled(true);
            odcinki.setEnabled(true);
            stop.setEnabled(false);
            save.setEnabled(true);
            wymaz.setEnabled(true);
            wykres.setEnabled(true);
            timer.stop();
        }
        if(b==save)
        {
            if(fc.showSaveDialog(this)==JFileChooser.APPROVE_OPTION)
            {
                try
                {
                    FileWriter fw=new FileWriter(fc.getSelectedFile());
                    fw.write("Ilość odcinków: "+segmenty.size()+"\n");
                    for (int i=0;i<wyniki.length;i++)
                    {
                        fw.write(String.format("%5.3f",i*0.001)+" - "+wyniki[i]+"\n");
                    }
                    fw.close();
                }
                catch(Exception e)
                {
                    JOptionPane.showMessageDialog(this,e.toString(),"",JOptionPane.INFORMATION_MESSAGE);
                }
            }
        }
        if(b==wymaz)
        {
            lamana.setEnabled(true);
            odcinki.setEnabled(true);
            stop.setEnabled(false);
            save.setEnabled(false);
            wymaz.setEnabled(false);
            wykres.setEnabled(false);
            segmenty.clear();
            for(int i=0;i<wyniki.length;i++)
                wyniki[i]=0;
            repaint();
            timer.stop();
        }
        if(b==wykres)
        {
            oknoWykresu.setVisible(true);
        }
    }
}
//------------------------------------------------

class PanelOdcinkow extends JPanel
{
    private Odcinki parent;
    //------------------------
    public PanelOdcinkow(Odcinki parent)
    {
        super();
        setPreferredSize(new Dimension(400,300));
        this.parent=parent;
    }
    //------------------------
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Graphics2D g2=(Graphics2D)g;
        for(Line2D.Float l:parent.segmenty)
            g2.draw(l);
    }
}
//------------------------------------------------
class RamkaWykresuOdcinkow extends JFrame
{
    private Odcinki parent;
    //------------------------
    public RamkaWykresuOdcinkow(Odcinki parent)
    {
        super("Wykres");
        this.parent=parent;
        setLayout(new FlowLayout());
        add(new PanelWykresu(parent));
        pack();
        setLocationRelativeTo(null);
    }
}
//-------------------------------------------------
class PanelWykresu extends JPanel
{
    private Odcinki parent;
    //------------------------
    public PanelWykresu(Odcinki parent)
    {
        super();
        setPreferredSize(new Dimension(1020,620));
        this.parent=parent;
    }
    //------------------------
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawLine(5,610,1015,610);
        g.drawLine(1015,610,1012,608);
        g.drawLine(1015,610,1012,612);
        g.drawLine(10,5,10,615);
        g.drawLine(10,5,12,8);
        g.drawLine(10,5,8,8);
        int max=0;
        for(int i=0;i<parent.wyniki.length;i++)
            max=Math.max(max,parent.wyniki[i]);
        if(max==0)
            return;
        g.drawString("Ilość odcinków: "+parent.segmenty.size()+"  najwieksza wartość: "+max,20,15);
        int jednostka=600/max;
        for(int i=0;i<parent.wyniki.length;i++)
        {
            int y=610-jednostka*parent.wyniki[i];
            g.drawLine(10+i,y,10+i,y);
        }
    }
}
0

???

Tworzysz sobie nowy panel który dziedziczy po JPanel. A potem przeciążasz nie paint tylko paintComponent i wtedy robisz sobie g.drawline....

Tu masz wszystko ładnie i prosto opisane:
http://wws2.uncc.edu/tpw/tpwJavaNtebeansTutorial/index.html

DrawingArea...poczytaj, załaduj tamtejszy projekt-spróbuj cos dodac , odjać a potem znów zadaj pytanie.

0

dzięki wielkie...rozjaśniło mi to sprawę...

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