На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Построение графиков в JAVA , Вопросы построения графиков в JAVA
    Приветствую многоуважаемый Олл!
    Подскажите pls, какие существуют способы построения графиков в JAVA, процедуры, примеры кода (Требуется построить график заранее известной математической функции). :wall:

    З.Ы. Заранее спасибо за любую инфу по этому вопросу. :D
      Посмотри в сторону либы JFreeChart.
        thanks you :yes:
          В принципе для просто го варианта все может быть гораздо проще. Вот текст программы, которую мне студенты делали. Там правда заполнение векторов данных для графика идет из файла с числами, но никто тебе не мешает сделать заполнение в виде функции.

          ExpandedWrap disabled
            import javax.swing.JFrame;
            import javax.swing.JPanel;
            import javax.swing.JButton;
            import javax.swing.JFileChooser;
            import java.awt.event.ActionEvent;
            import java.awt.event.ActionListener;
            import java.io.File;
            import java.io.BufferedReader;
            import java.io.FileReader;
            import java.io.IOException;
            import java.util.Vector;
            import java.awt.Graphics;
            import java.awt.Color;
             
            public class Graphik extends JFrame
            {
              public static void main(String[] args)
              {
                Graphik graphik1 = new Graphik();
                graphik1.setDefaultCloseOperation(EXIT_ON_CLOSE);
                graphik1.setVisible(true);
              }
             
              public Graphik()
              {
                JButton btn = new JButton("OTKPbITb");
                GraphPanel p = new GraphPanel();
                btn.addActionListener(p);
                getContentPane().add("North", btn);
                getContentPane().add("Center", p);
                setBounds(100, 100, 500, 500);
              }
             
            }
             
            class GraphPanel extends JPanel implements ActionListener
            {
              private Vector vx = new Vector();
              private Vector vy = new Vector();
             
              public void paintComponent(Graphics g)
              {
                super.paintComponent(g);
             
                int xmax = Integer.MIN_VALUE;
                int xmin = Integer.MAX_VALUE;
                int ymax = Integer.MIN_VALUE;
                int ymin = Integer.MAX_VALUE;
             
                // Находим максимальные и минимальные значения
                for (int i = 0; i < vx.size(); i++) {
                  int x = ( (Integer) vx.get(i)).intValue();
                  int y = ( (Integer) vy.get(i)).intValue();
                  if (x > xmax) {
                    xmax = x;
                  }
                  if (x < xmin) {
                    xmin = x;
                  }
                  if (y > ymax) {
                    ymax = y;
                  }
                  if (y < ymin) {
                    ymin = y;
                  }
                }
             
                // определяем коэффициенты масштабирования
                double Kx = (getWidth()-1)/(xmax-xmin);
                double Ky = (getHeight()-1)/(ymax-ymin);
             
                // рисуем
                for(int i=1; i<vx.size(); i++) {
                  int x0 = ( (Integer) vx.get(i-1)).intValue();
                  int y0 = ( (Integer) vy.get(i-1)).intValue();
                  int x1 = ( (Integer) vx.get(i)).intValue();
                  int y1 = ( (Integer) vy.get(i)).intValue();
                  g.drawLine((int)Kx*(x0-xmin), (int)Ky*(y0-ymin), (int)Kx*(x1-xmin), (int)Ky*(y1-ymin));
                }
              }
             
              public void actionPerformed(ActionEvent e)
              {
                // Вот тут ты можешь заполнять вектора vx и vy расчетными данными а не считывать их из файла.
                JFileChooser f = new JFileChooser();
                f.showDialog(this, "Выберите файл");
                File fl = f.getSelectedFile();
                if (fl == null) {
                  return;
                }
                try {
                  vx.clear();
                  vy.clear();
                  BufferedReader br = new BufferedReader(new FileReader(fl));
                  String S = null;
                  while ( (S = br.readLine()) != null) {
                    String[] d = S.split("\\s+");
                    vx.add(new Integer(d[0]));
                    vy.add(new Integer(d[1]));
                  }
                }
                catch (IOException io_e) {
             
                }
                repaint();
              }
            }
            Доброго времени суток!

            Возможно ли рисование самого графика осуществить не в paintComponent(Graphics g) а в другой процедуре и сохранить его в память, а в paintComponent(Graphics g) только выводть его?
            Я пробовал сделать через BufferedImage, но ничего не получилось!
              Цитата Gugle @
              Я пробовал сделать через BufferedImage, но ничего не получилось!

              Что не вышло?
                ExpandedWrap disabled
                  import java.awt.BasicStroke;
                  import java.awt.Color;
                  import java.awt.Dimension;
                  import java.awt.Graphics;
                  import java.awt.RenderingHints;
                  import java.awt.event.MouseEvent;
                  import java.awt.geom.Line2D;
                   
                  public class NewClass extends javax.swing.JPanel
                          implements java.awt.event.MouseListener, java.awt.event.MouseMotionListener {
                      
                      public NewClass() {
                          setBackground(_color.WHITE);
                          setForeground(_color.BLUE);
                          addMouseListener(this);
                          addMouseMotionListener(this);
                          
                          setPreferredSize(new Dimension((int)(_endX-_beginX), (int)(_endY-_beginY)));
                          setSize(new Dimension((int)(_endX-_beginX), (int)(_endY-_beginY)));
                          
                          getPoint();
                      }
                      
                      public void paintComponent(Graphics theGraphics) {
                          super.paintComponent(theGraphics);
                          java.awt.Graphics2D g2 =(java.awt.Graphics2D)theGraphics;
                          g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                          
                          // График
                          java.awt.geom.AffineTransform oldTransform = _gImage.getTransform();
                          _gImage.scale(_scaleX, _scaleY);
                          
                          //_gImage.setComposite(java.awt.AlphaComposite.getInstance(java.awt.AlphaComposite.SRC_OVER, 0.1F));
                          _gImage.setPaint(Color.RED);
                          
                          // если убрать коменты то рисуется
                          /*for (int i=0; i < _pointX.length-1; i++) {
                              double x1 = _pointX[i]-_beginX;
                              double y1 = _pointY[i];//-_beginY;
                              double x2 = _pointX[i+1]-_beginX;
                              double y2 = _pointY[i+1];//-_beginY;
                              java.awt.geom.Line2D line = new java.awt.geom.Line2D.Double(x1, y1, x2, y2);
                              //System.out.println(x1 +"/"+ y1 +" "+ x2 +"/"+ y2);
                              _gImage.draw(line);
                          }*/
                          
                          g2.drawImage(_image, null, 0, 0);
                          _gImage.setTransform(oldTransform);
                          
                          // Ползунок
                          if (_enableSlider) {
                              float[] dashPattern = {10, 10};
                              g2.setStroke(new BasicStroke(
                                      1.0F,
                                      BasicStroke.CAP_ROUND,
                                      BasicStroke.JOIN_MITER,
                                      10.0F,
                                      dashPattern,
                                      0));
                              g2.setPaint(_colorSlider);
                              
                              g2.draw(new Line2D.Double(_mouseX, 0,  _mouseX, getHeight()));
                              g2.drawString(String.valueOf(_mouseX), _mouseX, _textSlider);
                          }
                          
                      }
                      
                      public void invalidate() {
                          super.invalidate();
                          _image = new java.awt.image.BufferedImage(
                                  getWidth(),
                                  getHeight(),
                                  java.awt.image.BufferedImage.TYPE_INT_ARGB);
                          
                          _gImage = _image.createGraphics();
                   
                          // Если тут прорисовывать Image то графика нет.
                          for (int i=0; i < _pointX.length-1; i++) {
                              double x1 = _pointX[i]-_beginX;
                              double y1 = _pointY[i];//-_beginY;
                              double x2 = _pointX[i+1]-_beginX;
                              double y2 = _pointY[i+1];//-_beginY;
                              java.awt.geom.Line2D line = new java.awt.geom.Line2D.Double(x1, y1, x2, y2);
                              _gImage.draw(line);
                          }
                          //_gImage.setComposite(java.awt.AlphaComposite.getInstance(java.awt.AlphaComposite.SRC_OVER, 0.1F));
                          _gImage.translate(0, 0);
                          
                          
                          _scaleX = (double)getWidth() / (double)(_endX - _beginX);
                          _scaleY = (double)getHeight() / (double)(_endY - _beginY);
                          //System.out.println(_scaleX);
                          //System.out.println(_scaleY);
                      }
                      
                      // Задаем координаты
                      private void getPoint() {
                          _pointX = new int[_endX - _beginX];
                          java.util.Random r = new java.util.Random();
                          _pointY = new int[_endX - _beginX];
                          for (int i=0; i < _endX - _beginX; i++) {
                              _pointX[i] = i;
                              _pointY[i] = r.nextInt((_endY - _beginY));
                          }
                          //getGraph();
                      }
                      
                      public void mouseClicked(MouseEvent e) {
                          _image = new java.awt.image.BufferedImage(1, 1, java.awt.image.BufferedImage.TYPE_INT_ARGB);
                          _gImage = _image.createGraphics();
                          _gImage.translate(0, (double)getHeight());
                          this.repaint();
                          getPoint();
                          //setGenerateImage();
                          invalidate();
                          this.repaint();
                      }
                   
                      public void mousePressed(MouseEvent e) {
                      }
                   
                      public void mouseReleased(MouseEvent e) {
                      }
                   
                      public void mouseEntered(MouseEvent e) {
                          _enableSlider = true;
                      }
                   
                      public void mouseExited(MouseEvent e) {
                          _enableSlider = false;
                      }
                   
                      public void mouseDragged(MouseEvent e) {
                      }
                   
                      public void mouseMoved(MouseEvent e) {
                          _mouseX = e.getX();
                          this.repaint();
                      }
                      
                      // Переменные
                      private Color _color;
                      
                      // Ползунки
                      private boolean _enableSlider = false;
                      private int _mouseX = 0;                    
                      private int _textSlider = 30;              
                      private Color _colorSlider = Color.BLUE;    
                      
                      // График
                      private int _beginX = 0;
                      private int _endX = 5000;
                      private int _beginY = 0;
                      private int _endY = 500;
                      private double _scaleX;
                      private double _scaleY;
                      private int[] _pointX = new int[0];
                      private int[] _pointY = new int[0];
                      
                      private java.awt.image.BufferedImage _image;
                      private java.awt.Graphics2D _gImage;
                  }


                При _gImage.draw(line); линии не заносятся в буфер?
                _image = new java.awt.image.BufferedImage(...) только память освобождает или заносит туда то что на панели?
                  Преркасный пример кода построения графиков в Java Java. Графики функций user posted image
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0343 ]   [ 15 queries used ]   [ Generated: 28.03.24, 14:52 GMT ]