2013-04-05 56 views
0

在單個系列中,即時間系列圖表中,必須獲得不同的形狀。但它沒有來...請參考下面的代碼,告訴我我犯了什麼錯誤?形狀在if和else if語句中沒有變化Jfreechart

 TimeSeriesCollection dataset = new TimeSeriesCollection(glucoseries);             
     JFreeChart chart = ChartFactory.createTimeSeriesChart("Glucometer","Date","value",dataset,true,true,false);       

    XYPlot xyplot = (XYPlot)chart.getPlot(); 
    XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) xyplot.getRenderer(); 

    int glucovalue = Integer.parseInt(glcvalue); 

    if(glucovalue<80) 
    {  
    renderer.setSeriesShape(0,new Ellipse2D.Double(-3.0,-3.0,8.0,8.0)); 
    renderer.setSeriesShapesVisible(0,true); 
    } 
    else if(glucovalue>80 && glucovalue<100) 
    {    
    renderer.setSeriesShape(0,ShapeUtilities.createUpTriangle(4.0f)); 
    renderer.setSeriesShapesVisible(0,true);    
    } 
    else if(glucovalue>100 && glucovalue< 120) 
    {     
    renderer.setSeriesShape(0,ShapeUtilities.createDiamond(4.0f)); 
    renderer.setSeriesShapesVisible(0,true);      
    } 
    else 
    { 
    renderer.setSeriesShape(0,ShapeUtilities.createDownTriangle(4.0f)); 
    renderer.setSeriesShapesVisible(0,true);      
    } 

    ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); 
    File file1 = new File(request.getRealPath("\\jspchart\\gluco7.png")); 
    ChartUtilities.saveChartAsPNG(file1, chart, 700, 400, info);  

enter image description here

+0

事情是你所示的代碼生成suppled截圖? – GrahamA 2013-04-05 15:29:47

+0

@GrahamA它沒有生成...但我需要輸出像上面的截圖 – Ree 2013-04-06 04:18:11

回答

3

的邏輯在你的IF語句僅被評估一次,您需要繼承XYLineAndShapeRenderer#getItemShape以基於當前值返回一個形狀。這樣

XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(true, true){ 
     Shape ellipse = new Ellipse2D.Double(-3.0,-3.0,8.0,8.0); 
     Shape upTriangle = ShapeUtilities.createUpTriangle(4.0f); 
     Shape diamond = ShapeUtilities.createDiamond(4.0f); 
     Shape downTriangle = ShapeUtilities.createDownTriangle(4.0f); 


     @Override 
     public Shape getItemShape(int row, int column) { 
      Double value = (Double) plot.getDataset(0).getY(row, column); 
      if (value > 6.0) { 
       return ellipse; 
      } else if (value >= 5.0) { 
       return upTriangle; 
      } else if (value >= 2.0) { 
       return diamond; 
      }else { 
       return downTriangle; 
      } 
     } 

    }; 

    plot.setRenderer(renderer); 

enter image description here

+0

由於繪圖對象位於方法getItemShape()內部,因此無法識別,並且在此時顯示錯誤.... – Ree 2013-04-06 05:11:30

+0

將繪圖標記爲最終繪圖。你在使用IDE嗎? Eclipse會爲您提供此修補程序。 – GrahamA 2013-04-06 06:33:17

+0

單個系列中的每個不同形狀都必須用不同的顏色填充..我嘗試使用renderer.setFillPaint()函數,但渲染器不適用...可以告訴我渲染器必須在何處完全應用? – Ree 2013-04-06 09:36:34

0

我無法弄清楚什麼是價值:glucovalue

但你在這裏漏掉一兩件事:你有沒有正確地考慮邊界值。

對於如:

if(glucovalue<80) 
{  
renderer.setSeriesShape(0,new Ellipse2D.Double(-3.0,-3.0,8.0,8.0)); 
renderer.setSeriesShapesVisible(0,true); 
} 
else if(glucovalue>80 && glucovalue<100) 
{  

在上面的代碼中,沒有一例會,如果glucovalue = 80

更改代碼如下搭配:

if(glucovalue<80) 
{  
renderer.setSeriesShape(0,new Ellipse2D.Double(-3.0,-3.0,8.0,8.0)); 
renderer.setSeriesShapesVisible(0,true); 
} 
else if(glucovalue>=80 && glucovalue<=100) 
{ 
+0

如果是這樣會進入其他部分...但仍然形狀沒有變化 – Ree 2013-04-05 10:03:17

+0

如果你還有其他部分,那麼它怎麼可能沒有什麼是執行。你有什麼異常嗎? – 2013-04-05 11:17:12