I agree with Kevin's suggestion...delegate the drawing to each object you want to draw. You could theoretically create an interface that has 2 methods: a draw and contains. This will abstract the drawing and selection routines away from the actual drawer component and give you a lot more flexibility in what you draw (for example rendering images, drawing text, etc...).
That being said, to answer your original question you can get a Shape of text using the following (presuming the variable g is a Graphics2D instance):
Font font = g.getFont();
TextLayout layout = new TextLayout("2", font, g.getFontRenderContext());
Shape s = layout.getOutline(g2.getTransform());
I'm trying to figure out a way to effectively draw out a maze of lines.
Create a graph data structure, then traverse the graph and (if needed) drawing lines between.