2015-01-21 3 views
0

У меня проблема на дисплее оси и всплывающей подсказки на JFreeChart, они не отображают все значения, я пытаюсь отобразить байты на основе ежедневного использования, вот изображение, чтобы показать точно моя проблема: enter image description hereНевозможно отобразить правильную ось и всплывающую подсказку на jfreechart

Отсутствуют некоторые значения, а на самой высокой красной полосе не отображаются байты на всплывающей подсказке. Вот мой код:

final JFreeChart chart = createTrafficChart(); 
    chartPanel = new ChartPanel(chart, true, true, true, true, true);  
    chartPanel.setPreferredSize(new java.awt.Dimension(750, 367));    
    a.gridx = 0; 
    a.gridy = 3; 
    jpContainer.add(chartPanel, a); 

private JFreeChart createTrafficChart() { 

    // create plot ... 
    final IntervalXYDataset data1 = createDatasetDownload(); 
    XYBarRenderer t= new XYBarRenderer(0.20); 
    t.setShadowVisible(false); 
    final XYItemRenderer renderer1 = t; 
    renderer1.setBaseToolTipGenerator(new MyTrafficToolTipGenerator()); 
    final DateAxis domainAxis = new DateAxis("Date"); 
    domainAxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE); 
    final NumberAxis rangeAxis = new NumberAxis("Bytes"); 
    setupRangeAxis(rangeAxis); 
    final XYPlot plot = new XYPlot(data1, domainAxis, rangeAxis, renderer1); 

    // add a second dataset and renderer... 
    final XYDataset data2 = createDatasetUpload(); 
    final XYItemRenderer renderer2 = new StandardXYItemRenderer(); 
    renderer2.setBaseToolTipGenerator(new MyTrafficToolTipGenerator()); 
    plot.setDataset(1, data2); 
    plot.setRenderer(1, renderer2);   
    plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD); 

    return new JFreeChart("Traffic", JFreeChart.DEFAULT_TITLE_FONT, plot, true); 

} 

И этот код:

public void setupRangeAxis(NumberAxis rangeAxis) { 
     final TickUnits standardUnits = new TickUnits(); 
     standardUnits.add(new MyNumberTickUnit(1)); 
     standardUnits.add(new MyNumberTickUnit(10)); 
     standardUnits.add(new MyNumberTickUnit(100)); 
     standardUnits.add(new MyNumberTickUnit(1024)); // Kilo 
     standardUnits.add(new MyNumberTickUnit(10000)); 
     standardUnits.add(new MyNumberTickUnit(100000)); 
     standardUnits.add(new MyNumberTickUnit(1024*1024)); // Mega 
     standardUnits.add(new MyNumberTickUnit(10000000)); 
     standardUnits.add(new MyNumberTickUnit(100000000)); 
     standardUnits.add(new MyNumberTickUnit(1024*1024*1024)); // Giga 
     standardUnits.add(new MyNumberTickUnit(10000000000L)); 
     standardUnits.add(new MyNumberTickUnit(100000000000L)); 
     standardUnits.add(new MyNumberTickUnit(1024*1024*1024*1024)); // Tera 
     standardUnits.add(new MyNumberTickUnit(10000000000000L)); 
     standardUnits.add(new MyNumberTickUnit(100000000000000L)); 
     standardUnits.add(new MyNumberTickUnit(1000000000000000L)); // Peta 
     standardUnits.add(new MyNumberTickUnit(10000000000000000L)); 
     standardUnits.add(new MyNumberTickUnit(100000000000000000L)); 
     standardUnits.add(new MyNumberTickUnit(1000000000000000000L)); // Exa 
     rangeAxis.setStandardTickUnits(standardUnits); 
    } 

Что я нашел here. У меня тоже есть этот код:

public class MyNumberTickUnit extends NumberTickUnit{ 

private static final long serialVersionUID = 4281451255133640119L; 

public MyNumberTickUnit(double size) { 
    super(size); 

} 

public String valueToString(double value){ 
    return StringFormat.formatTheTraffic(value); 
} 

}

public class StringFormat { 
public static String formatTheTraffic(double input) { 
     String result = ""; 

     if (input < KILO_BYTES) { 
      result = input + " Byte"; 
     } else if ((input < MEGA_BYTES) && (input >= KILO_BYTES)) { 
      result = new DecimalFormat("##.#").format(input/KILO_BYTES) + " KB"; 
     } else if ((input < GIGA_BYTES) && (input >= MEGA_BYTES)) { 
      result = new DecimalFormat("##.#").format(input/MEGA_BYTES) + " MB"; 
     } else if ((input < TERA_BYTES) && (input >= GIGA_BYTES)) { 
      result = new DecimalFormat("##.#").format(input/GIGA_BYTES) + " GB"; 
     } 
     return result; 
    } 
    } 

Спасибо за ваше внимание и время!

ответ

0

Я нашел свою проблему. Это было внутри метода formatTheTraffic! Я меняю его и работаю правильно!

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