Java:通过fillRect()绘制直方图

时间:2014-03-12 19:16:27

标签: java paint histogram

我喜欢制作直方图。使用drawLine(),对我来说这不是一个问题,但是当我尝试使用fillRect()时,矩形会从上到下。我想画直方图看起来类似于我的直方图drawLine()

这是我的代码:

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;
    }

}

需要改变什么?

2 个答案:

答案 0 :(得分:2)

  

&#34;但是当我尝试使用fillRect时,矩形将从上到下进行。&#34;

您需要考虑的一些事项。

  1. 一个水平线,例如,如果你的面板大小是500,你会希望水平线像450那样。所以让我们从那个开始

    int horizon = 450;
    
  2. 您需要考虑每个数据栏的高度。要做到这一点,你需要一个增量,让我们说每个单位,增量为5像素。因此,要获得高度,您需要将单位数乘以增量

    int increment = 5;
    ...
    int height = increment * units;
    
  3. 现在您需要做的是从height中减去horizony

    fillOval起点
    int y = horizon - height
    

  4.  0  +---------------------
        |
        |
        |
        |    +----+   horizon - height = 150 = y point for fillRect
        |    |    |
        |    |    |
        |    |    |
     y  |    |    |   height = 300
        |    |    |
        |    |    |
        |    |    |
        |----------------------  450 horizon
        |
        +----------------------  500
    
    g.fillRect(x, y, width, height);
    

答案 1 :(得分:0)

我建议旋转/翻译Graphics对象:

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

其中(cx,cy)是绘图的中心。图形将围绕该中心旋转180度。