I built everything outside the running game, mainly the lobby, with Swing.
The game itself only uses primitive do-it-yourself image based buttons and progress bars.
Doing a complete UI library is not trivial at all and usually too much effort for an one-man project.
For an intermediate in-game screen under Java2D I also set up Swing buttons, which is a bit tricky with active rendering, but it works.
About Java2D, I think it’s a good starting choice for the overall beginner. Simple to use, fast and lets you concentrate on all the other gigantic tasks to solve. In my current game, only 4% of the overall code base is related to Java2d stuff, and another 5% to LibGdx. Rest is about infrastructure, AI, network, tiles, collisions, sound, etc., etc.