I'm making slower progress on my own, but it's happening. The game end sequence is much cleaner now, and I got the final debriefing window to hang out long enough to be read.
Still loathe java swing just as much as ever. I think the core concept of good UI design (and hence, good design period, for any product which is meant to be used by people, which is basically all of them) can be summed up as follows: whatever it is that people are going to do with your product most of the time, it should be good at that. If there's a common use, that should correspond to the default behavior. If there's an obvious way to interact with it, that should do something sensible. Don't punt on sensible defaults because they're more work -- that's just laziness. If you can't figure out what sensible defaults are, you have no business designing the product.
I don't think the developers of swing even had a concept of "default behavior"; they just have code that happens to function even when attributes are unset. Bad, bad, bad design, and utterly inexcusable, given that John Osterhout (designer of Tcl/Tk, which has very, very good defaults) was working at Sun at the time. I suspect that part of their mandate may have been "make sure it looks as little like Tk as possible, so we don't have to pay him any royalties".