有谁知道为什么我的条形图上的条形图显示颠倒了?我可以添加什么代码以在每个条形图之间留出一点空间?当我说倒置时,我的意思是酒吧甚至在顶部,而且它们的长度不同
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);
}
}
}
答案 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
方法中假设任何有关组件实际大小的内容,您想要的和您得到的内容并不总是相同的。
使用paint
和getWidth
来确定可见区域的实际大小。
答案 1 :(得分:0)
来自fillRect()
的文档(我的empasis):
左和矩形的右边缘位于 x 和x + width - 1。 顶部和底部边缘位于 y 和y + height - 1.
因此x
向右增加,y
向下增加。