2014-03-12 107 views
0

我喜歡製作直方圖。對於drawLine(),這對我來說不是問題,但是當我嘗試使用fillRect()時,矩形會從上到下。我想繪製直方圖,看起來類似於我的直方圖drawLine()Java:通過fillRect()繪製直方圖

這裏是我的代碼:

public void paint(Graphics g) { 

    super.paint(g); 
    int height = getHeight(); 
    int width = getWidth(); 
    int x =10; 
    haufigkeit=model.getMap(); 
    for(int i = 1; i <= 45; i++) { 
     int y; 
     y = haufigkeit.get(i);    
     Color color = new Color(0, 0, (int)(150 + Math.random() * 100)); 
     g.setColor(color); 

     // g.fillRect(x, 50, 10, y); 

     // g.drawLine(x, height - 50, x, height- y); 

     x+=20; 
    } 

} 

什麼需要改變?

+0

'x,height-50,x,height-y'是無序的。將其更改爲'x,height-y,rectWidth,y',其中rectWidth是每個矩形的寬度。 – Obicere

+0

drawLine(x,height-50,x,height-y);是我喜歡做什麼的。 問題是fillRect(x,50,10,y);現在它正在從上到下繪製需要改變。 – user3412282

回答

2

「但是當我嘗試使用fillRect來完成時,矩形會從頂部到底部。」

你需要考慮幾件事情。

  1. 一個水平線,例如,如果你的面板尺寸是500,你要地平線是像450那麼讓我們開始與

    int horizon = 450; 
    
  2. 您需要考慮每個數據欄的高度。要做到這一點,你需要一個增量,讓我們對每個單位說一個5px的增量。因此,要獲得高度你乘的單位數由增加量

    int increment = 5; 
    ... 
    int height = increment * units; 
    
  3. 現在,所有你需要做的就是減去從horizonheight,你必須爲fillOval

    int y = horizon - height 
    
    y起點

0 +--------------------- 
    | 
    | 
    | 
    | +----+ horizon - height = 150 = y point for fillRect 
    | | | 
    | | | 
    | | | 
y | | | height = 300 
    | | | 
    | | | 
    | | | 
    |---------------------- 450 horizon 
    | 
    +---------------------- 500 

g.fillRect(x, y, width, height); 
+0

感謝您的幫助! 你的繪畫幫了很多! :-) – user3412282

0

我建議轉/翻譯Graphics對象:

Graphics2D graphics = (Graphics2D) g; 
graphics.rotate(Math.PI, cx, cy); 

其中(CX,CY)是繪圖的中心。圖形將圍繞該中心旋轉180度。