The big question is: What makes one Shape less than, equal to, or greater than another Shape?
You can't implement the Comparable interface until you make that decision.
First, I think you should create the ShapeComparator class in it's own file so you don't have to worry about the messiness of inner classes yet.
Second, the ShapeComparator assumes that Shape has a compareTo() method which means it probably implements the Comparable interface. If Shape impelements Comparable, there is no reason to have a separate ShapeComparator class.