JPanel帮助绘制条形图

时间:2014-09-09 00:50:16

标签: java swing graphics2d

有谁知道为什么我的条形图上的条形图显示颠倒了?我可以添加什么代码以在每个条形图之间留出一点空间?当我说倒置时,我的意思是酒吧甚至在顶部,而且它们的长度不同

import java.awt.*;

import javax.swing.*;
public class Panel extends JPanel
    {
    int []nums;
    String[]cat;
    String t;
    int max=0;
    int width=0;
    int height=0;
    public Panel(int []x,String[]y,String a)
    {
        for(int i=0;i<x.length;i++)
        {
            if(x[i]>max)
                max=x[i];
        }
        nums=x;
        cat=y;
        t=a;
        width=nums.length*100+nums.length*10;
        height=max*10+500;
        setSize(width,height);
    }
    public void paint(Graphics g)
    {
        Font title=new Font("TimesNewRoman",Font.BOLD,20);
        FontMetrics titl=g.getFontMetrics(title);
        g.setFont(title);
        g.drawString(t,width/2,20);
        Font label=new Font("TimesNewRoman",Font.BOLD,15);
        FontMetrics labl=g.getFontMetrics(label);
        g.setFont(label);
        for(int j=0;j<nums.length;j++)
        {
            g.setColor(new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256)));
            g.drawString(cat[j],(nums.length*100)-((nums.length-j)*100)+22,height-20);
            g.fillRect(j*100,height-400,100,nums[j]*15);


        }





    }
}

2 个答案:

答案 0 :(得分:3)

主要问题是......

g.fillRect(j * 100, height - 400, 100, nums[j] * 15);

基本上,这表示从j * 100 x height - 400绘制一个100宽且nums[j] * 15高的矩形...

从x / y位置

向右/向下绘制矩形

您需要将y位置从height偏移到条形高度...

g.fillRect(j * 100, height - (nums[j] * 15), 100, nums[j] * 15);

请勿覆盖paint,这不是最佳使用方法,请考虑使用paintComponent并确保在执行任何自定义绘制之前调用super.paintComponent。有关详细信息,请参阅Performing Custom Painting

不要在组件上使用setSize,传递它的任何值都将由父容器的布局管理器重置。改为覆盖getPreferredSize的{​​{1}}。

永远不要在JPanel方法中假设任何有关组件实际大小的内容,您想要的和您得到的内容并不总是相同的。

使用paintgetWidth来确定可见区域的实际大小。

答案 1 :(得分:0)

来自fillRect()的文档(我的empasis):

  

和矩形的右边缘位于 x 和x + width - 1。   顶部和底部边缘位于 y 和y + height - 1.

因此x向右增加,y向下增加。

相关问题