2016-10-17 3 views
0

Я хочу сделать линейный график с значениями х 1-100 и у значений от 1 до 18. Я их храню в двух массивах, которые в настоящее время печатаются в текстовые файлы (по очевидным причинам я не хочу вручную составлять гистограмму, состоящую из 100 точек). Может быть, что-то использует окно приложения?В java вы можете сделать линейный график из двух массивов?

Я не знаю, какую дополнительную информацию я могу дать вам, чтобы сделать ее более ясными, о чём прошу просить, поэтому, если есть что-то, просто попросите об этом и плохо опубликуйте его.

+0

Ищите библиотеки графических объектов. – ifly6

+0

Я до сих пор ничего не пробовал, я пытался найти руководство, но ничего не нашел. Я также не уверен, что лучший способ опубликовать мой код – Husk

ответ

1

Что-то вроде этого, может быть?

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Graphics; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public final class LineGraph { 
    private LineGraph() { 

    } 

    public static void main(final String[] args) { 
     SwingUtilities.invokeLater(LineGraph::doRun); 
    } 

    private static void doRun() { 
     final int[] x = new int[] {0, 40, 80, 120, 160, 200, 240, 280, 320, 360}; 
     final int[] y = new int[] {100, 200, 100, 50, 200, 0, 300, 200, 100, 300}; 

     final 
     JFrame jFrame = new JFrame(); 
     jFrame.getContentPane().setLayout(new BorderLayout()); 
     jFrame.getContentPane().add(new JPanelImpl(x, y), BorderLayout.CENTER); 
     jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jFrame.setSize(800, 600); 
     jFrame.setVisible(true); 
    } 

    private static final class JPanelImpl extends JPanel { 
     private final int[] x; 
     private final int[] y; 

     public JPanelImpl(final int[] x, final int[] y) { 
      this.x = x; 
      this.y = y; 
     } 

     @Override 
     public void paintComponent(final Graphics graphics) { 
      graphics.setColor(Color.WHITE); 
      graphics.fillRect(0, 0, getWidth(), getHeight()); 

      for(int i = 0; i < this.x.length; i++) { 
       if(i + 1 < this.x.length) { 
        final int x0 = this.x[i]; 
        final int y0 = this.y[i]; 
        final int x1 = this.x[i + 1]; 
        final int y1 = this.y[i + 1]; 

        graphics.setColor(Color.BLACK); 
        graphics.drawLine(x0, y0, x1, y1); 
        graphics.fillOval(x1 - 3, y1 - 3, 6, 6); 
       } 
      } 
     } 
    } 
} 
+0

Спасибо, его работа, но у меня есть некоторые проблемы. график действительно маленький и находится в верхнем левом углу, а также вверх дном. плохо попытайтесь исправить это сам, но вы знаете, почему, пожалуйста, дайте мне знать. – Husk

+0

Окно использует координаты, где минимум X находится слева от окна, максимум X справа, минимальный Y находится вверху, а максимум Y - внизу. Я считаю, что ось X похожа на то, что вы хотите. Но для оси Y делать что-то вроде (height-y) было бы (если я не ошибаюсь). –

+0

Я понял, я просто умножал переменные, когда устанавливал их в массив. Спасибо, человек, это действительно помогает – Husk

Смежные вопросы