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.

Problem z wykresem [java]

joker-mj 05 Cze 2010 21:39 680 4
  • #1 05 Cze 2010 21:39
    joker-mj
    Poziom 8  

    Code:

     
    import java.awt.Color;

    import java.awt.Dimension;

    import java.awt.Graphics;

    import java.awt.GraphicsConfiguration;

    import java.awt.GraphicsEnvironment;

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import java.awt.image.BufferedImage;

    import javax.swing.JFrame;

    import javax.swing.JPanel;

    import javax.swing.SwingUtilities;

    import javax.swing.Timer;




    public class Chart extends JPanel {



        private Timer timer = null;

        private int x0 = 0, y0 = 119, x1, y1;

        private BufferedImage buffer = null;

       
        public Chart() {

            setPreferredSize( new Dimension(400, 400) );

       

        }

        public void addLineToChart() {
           
           
            x1 = x0+5;
            if( y0%2 == 0 )                         
            {
                y1 = y0/2;
            }
            else
            {
                y1=3*y0+1;
            }
         
           
            Graphics g = buffer.createGraphics();

            g.setColor( Color.RED );
         
            g.drawLine(x0, y0, x1, y1);
         
            g.dispose();

            repaint();

            x0 = x1;

            y0 = y1;
       
        }



       

        protected void paintComponent(Graphics g) {

            if ( buffer == null ) {

                GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();

                GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration();

                buffer = gc.createCompatibleImage( getWidth(), getHeight() );

                Graphics gb = buffer.createGraphics();





                gb.setColor( Color.WHITE );

                gb.fillRect(0, 0, getWidth(), getHeight());



            }

            if ( timer == null ) {

                timer = new Timer( 1000, new ActionListener() {

                    public void actionPerformed(ActionEvent e) {

                        addLineToChart();

                    }

                });

                timer.start();

            }

            g.drawImage(buffer, 0, 0, null);

        }



        public static void main(String[] args) {

            SwingUtilities.invokeLater( new Runnable() {

                public void run() {

                    JFrame frame = new JFrame("Chart");

                    frame.setContentPane( new Chart() );

                    frame.pack();               

                    frame.setLocationRelativeTo(null);

                    frame.setResizable( false );

                    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

                    frame.setVisible( true );

                }

            });

        }



    }


    Kod ten nie został napisany przeze mnie, tylko troszkę go zmodyfikowałem aby wyświetlał liczby gradowe. Problemem jest rysowanie wykresu od lewego górnego rogu a nie tak jak to jest standardowo od lewego dolnego. Chciałbym to zmienić i nie za bardzo wiem jak. Proszę o pomoc.

    Pozdrawiam.

    0 4
  • #2 05 Cze 2010 22:45
    gaskoin
    Poziom 38  

    joker-mj napisał:

    Problemem jest rysowanie wykresu od lewego górnego rogu a nie tak jak to jest standardowo od lewego dolnego. Chciałbym to zmienić i nie za bardzo wiem jak. Proszę o pomoc.

    Pozdrawiam.


    po pierwsze popraw post, po drugie - standardowo w javie w cale nie jest od lewego dolnego rogu, tylko wlasnie od gornego lewego

    0
  • #3 05 Cze 2010 23:01
    joker-mj
    Poziom 8  

    Ok. W takim razie chciałbym aby zaczynał rysować niestandardowo od lewego dolnego rogu.

    0
  • Pomocny post
    #4 05 Cze 2010 23:35
    gaskoin
    Poziom 38  

    :D

    w javie nie da sie zmienic orientacji tych osi, jedyne co mozesz zrobic, to troche to oszukac.
    poniewaz wykres ma byc rysowany od dołu musiałbyś znać wielkosc pola przeznaczonego na rysowanie (w twoim przypadku dajmy na to jest to 400).

    wiec od wysokosci tego okna, odejmujesz wartosc y,

    Code:
     g.drawLine(x0,y0, x1,y1);


    zamieniasz na:

    Code:
     g.drawLine(x0, this.getHeight() - y0, x1, this.getHeight() - y1);


    o to chodzilo?

    0
  • #5 05 Cze 2010 23:43
    joker-mj
    Poziom 8  

    :D

    Tak. Satysfakcjonuje mnie takie rozwiązanie. Dziękuję za pomoc.

    0