Well, what I did was basically your approach, but then I have subclasses for showing wordwrapped text within some certain boundaries, and they all had their own draw-method.
It takes next to no CPU to check a boolean. Alternatively you could have different states in your menus, represented by a single integer, and have some constants to identify them. That is if you know your don't have too much random stuff going on.
Take a look at what I did for mine. I did a lot of work to get there, but it ended up being very few classes for all that. Each menu (stats-panel, abilities, shop etc.) is a separate class, but all the individual text-boxes are the same three types: One wordwrapped box (each individual conversation-box and the ability-box at the top when fighting), one with the ability to choose from a list (the talk menu panel), and one where you can choose things from a list with the ability to have some things unavailable (the main menu and boxes in battle).Showcase Video
EDIT: I wrote another guy here a long description of how I set all this up. If you want I can PM that big momma to you