Диаграмма с фиксированным вторым временным интервалом по оси X - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь создать диаграмму с диаграммой x со значениями интервалов от 0 до 120. Данные будут обновляться каждую секунду.Тип диаграммы точно такой же, как и у ЦП в диспетчере задач Windows: this


Я проверил темы:

  1. Случайные ошибки при смене ряда с использованием JFreeChart
  2. Движение серии JFreechart с фиксированной осью X
  3. JFreeChart - Как показать в реальном времени X- Ось графика TimeSeries

Хотя ответы на эти темы были действительно полезны для меня, я все же не понял, чего хочу.

Заранее спасибо.

1 Ответ

0 голосов
/ 01 октября 2018

Поскольку у меня не было ответа, я тем временем решил свою проблему следующим образом.Тем не менее, я думаю, что есть, и должен быть, более простой способ сделать это. Так как я был ограничен во времени, я нашел это решение.Если у вас есть что-то лучше или что-то, что вы считаете нужным улучшить, пожалуйста, поделитесь этим.

Я добавляю к своему LinkedList, пока он не станет таким большим, как я хочу (в данном случае 120).После этого удаляет последнюю запись, добавляет в начало.Этот метод вызывается каждую секунду другим потоком.

   private final LinkedList<XYDataItem> countHistory = new LinkedList<>();
   private static final int MAX_RANGE_IN_X_AXIS_FOR_XY_CHART = 121;
enter code here
   public void getDataAndRefresh( final DefaultTableXYDataset xySeriesCollection)
   {
      synchronized ( this.adsbItemMap )
      {
         int count = 0;

     if ( xySeriesCollection.getSeries( 0 ) != null )
     {
        final XYSeries xySeries = xySeriesCollection.getSeries( 0 );
        try
        {

           if ( this.counter == MAX_RANGE_IN_X_AXIS_FOR_XY_CHART )
           {
              xySeries.getItems().forEach( item -> {
                 final XYDataItem xyItem = ( XYDataItem ) item;
                 this.countHistory.addLast(
                       new XYDataItem( xyItem.getXValue()+1,xyItem.getYValue()));
              } );
              //xySeries.clear();
              this.countHistory.pollLast();
              this.countHistory.addFirst( new XYDataItem( 0, count ) );
              this.countHistory.forEach( xySeries::addOrUpdate );
              this.countHistory.clear();
           }
           else
           {
              xySeries.getItems().forEach( item -> {
                 final XYDataItem xyItem = ( XYDataItem ) item;
                 this.countHistory.addLast(
                       new XYDataItem( xyItem.getXValue() + 1, xyItem.getYValue() ) );
              } );
              final XYDataItem countItem = new XYDataItem( 0, count );
              this.countHistory.addFirst( countItem );
              this.countHistory.forEach( xySeries::addOrUpdate );
              this.countHistory.clear();
              this.counter++;
           }
        }
        catch ( final Exception e )
        {
           LOG.warn( "Something went wrong.", e );
        }
     }
     //clear
     total.setValue( count );
     this.adsbItemMap.clear();
  }
}
...