Рисование линейного графика с использованием компонента Paint - PullRequest
1 голос
/ 29 февраля 2012

Как бы вы пошли на создание линейного графика, используя выходные данные из потока, потоки симулируют входящий и исходящий счет, который выполняется в течение 52 секунд, и это будет отражено на линейном графике, как показано ниже

Я хочу использовать компонент рисования, а не сторонние классы, такие как JChart.

enter image description here

1 Ответ

2 голосов
/ 29 февраля 2012

Предполагая, что у вас есть какой-то объект JPanel, который вы используете для рисования, я бы добавил к вашему объекту следующее:

public class GraphPanel extends JPanel{
    //static constants for defining the size and positioning of the graph on canvas
    //Ignore the values I chose, they were completely random :p
    private static final int X_AXIS_LENGTH = 1000;
    private static final int Y_AXIS_LENGTH = 500;

    private static final int X_AXIS_OFFEST = 50;
    private static final int Y_AXIS_OFFSET = 50;
...

Все они должны быть постоянными значениями, определяющими желаемый вами размер.график на холсте (длина оси) и его позиционирование (смещения).

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

...
@Override
public void paintComponent(Graphics g){
    int x, y;
    int prevX, prevY;
    int maxX, maxY;
    ...
    //retrieve values from your model for the declared variables
    ...
    //calculate the coords of your line on the canvas
    int xPos = ((x / maxX) * X_AXIS_LENGTH) + X_AXIS_OFFSET;
    ...
    //do the same for y, prevX, prevY and then you can use g.drawLine
}
...

Обратите внимание, что вы хотите изменить maxX и maxY, поскольку значения x и y превышают эти пределы, вам нужно будет добавитьнекоторый дополнительный код, чтобы проверить это изменение и перерисовать весь график с новыми ограничениями.

...