【问题标题】:JPanel HELP to draw a bargraphJPanel HELP 绘制条形图
【发布时间】:2014-11-02 07:38:22
【问题描述】:

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

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


        }





    }
}

【问题讨论】:

标签: java swing graphics2d


【解决方案1】:

主要问题是......

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,您传递给它的任何值都将被父容器的布局管理器重置。改为覆盖 JPanelgetPreferredSize

永远不要在 paint 方法中假设组件的实际大小,你想要什么和你得到什么并不总是一样的。

使用getWidthgetHeight 确定可视区域的实际大小。

【讨论】:

  • 那么我将如何解决@MadProgrammar
  • @user3196301: 再次按照 Mad 的评论,重写 paintComponent 并调用 super 方法。 1+
  • 感谢@MadProgrammar
【解决方案2】:

来自fillRect() 的文档(带有我的重点):

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

所以x 向右增加,y - 向下。

【讨论】:

    猜你喜欢
    • 2017-01-10
    • 2011-03-17
    • 1970-01-01
    • 2020-06-23
    • 2012-12-09
    • 2011-12-05
    相关资源
    最近更新 更多