<< Back

	public void actionPerformed(ActionEvent e)
	{
		for(int x=0; x < size; x++)
		{
			labels[x] = input[x].getText();
			Double temp = Double.valueOf(labels[x]);
			number[x] = temp.doubleValue();
		}
		
		// scale graphs as needed
		max = number[0];
		for(int x=1; x < size; x++)
			if(max < number[x])
				max = number[x];
		scaleFactor = 450/max;
		for(int x=0; x < size; x++)
			number[x] *= scaleFactor;
		valuesEntered = true;
		repaint();
	}
	public void paint(Graphics g)
	{
		// draw axises
		g.drawLine(50,95,50,100+size*30);
		g.drawLine(50,100+size*30,500,100+size*30);
		
		// draw labels and bar graphs
		int y=100;
		for(int x=0; x < size; x++)
		{
			g.drawString("Value " + (x+1),5,y+17);
			g.setColor(new Color((float)Math.random(), (float)Math.random(), (float)Math.random()));
			g.fillRect(50,y,(int)Math.round(number[x]),25);
			g.setColor(Color.black);
			g.drawString(labels[x],55,y+15);
			y+=30;
		}
		
		// horizontal axis based on scaling value
		if(valuesEntered)
		{
			double tickSpace = max/10;
			double factor;
			factor = (int)(Math.log(tickSpace)/Math.log(10));
			factor = Math.pow(10.0, factor);
			// NOW we will round to the nearest factor
			tickSpace = Math.round((float)(tickSpace/factor))*factor;
			double spacing;
			if (max <=10)
				spacing = 450/max;
			else
				spacing=45;
			if (tickSpace >5 && tickSpace <10)
			{
				tickSpace = 10;
				spacing = 4500/max;
			}
			for(int i = 0; i<=10; i++)
			{
				g.drawLine((int)(50+i*spacing),218,(int)(50+i*spacing),222);
				g.drawString(Integer.toString((int)(tickSpace*i)),(int)(50+i*spacing),235);
			}
		}
	}