public void paintComponent(Graphics gParam){
		//Recast g to a 2D graphics object to access additional functionality
		Graphics2D g = (Graphics2D)gParam;
		
		//Turn on antialiasing
		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
		
		//set the background color
		g.setBackground(Color.gray);
		g.clearRect(0, 0, this.getWidth(), this.getHeight());
		
		//find the center of the grid
		xOffset=-minX+(this.getWidth()-(maxX-minX))/2;
		yOffset=-minY+(this.getHeight()-(maxY-minY))/2;
		
		//create and draw each booknode
		for(int i=0; i<books.size();i++){
			
			BookNode temp = books.get(i);
			int x = (int)temp.getX()+xOffset;
			int y = (int)temp.getY()+yOffset;
			int radius = (int)temp.getRadius();
			g.setColor(temp.getColor());
			g.fillOval(x-radius,y-radius,radius*2,radius*2);
			
			//slect the outline color
			if(temp.isSelected()){
				g.setStroke(new BasicStroke(2));
				g.setColor(selected);
			}else{
				
				g.setColor(outline);
			}
			g.drawOval(x-radius,y-radius,radius*2,radius*2);
			g.setStroke(new BasicStroke());
		}
	}