Having a look now at how you encapsulate your shaders, thanks for sharing.
The tutorials out there are indeed pathetic, it has to be said. It's depressing to know how many others will suffer through that stuff just to get a working shader-based app running. There are precious few good tutorials, Durian Software's and lighthouse3d's being some of the best. For anyone else using LWJGL, this was also immensely useful. I'm learning the programmable OpenGL 2.0 ES subset of OpenGL 2.1 using VBOs, and in spite of the usefulness of this approach due to its applicability to desktop and mobile and the fact that it is "modern", it's still incredibly hard to find a single, comprehensive tutorial that foregoes all the fixed pipeline cruft. The iOS and Android tutorials don't help either, as they encapsulate too much, hiding the basic OpenGL function calls from you. I had to use a few 3.0 tutorials to help me get up to speed with 2.0; fortunately the only difference was in & out vs. varying in GLSL 1.5, AFAICT.
If I were you, I'd take the time and learn OpenGL, particularly since you're a dedicated hobbyist at this stage. Like C and C++, it's a general-purpose tool that sets you up for opportunities in different industries, if it ever interests you to do 3D programming for eg. medical visualisation or defence contracting. They say that DirectX is a short leap from OpenGL. Also, I would say you can get into GPGPU technologies like OpenCL or Nvidia CUDA more easily if you take this route. And IMO, that's where the future is: General purpose, massively parallel processing without restricted access to the bulk of system memory.
So that's DirectX covered under that umbrella, as well. I would favour it only slightly less than OpenGL, but that's very much a personal preference. It's still miles ahead of the remaining alternatives.
For the above reasons and more, I wouldn't choose XNA. I find the framework restrictive and to me at least, the architecture desicions they took don't make much sense. Yes, I know it's great to be able to deploy for Windows and XBox360 at the same time. Yes I know C# 4.0 is (let's be fair) a great language in many ways. XNA may save you time. But I'd still avoid it unless I was specifically targetting the Xbox360 for a game that didn't require the degree of control that a lower level language offers.
To be fair, if you are not already a C or C++ programmer (you don't specify), I would certainly go the Java and OpenGL route. Notch, of Minecraft fame, has made a huge name for himself with those two technologies as an indie and I don't think that is something to sneeze at. I used Java briefly last year and in comparison to C#, it may have less modern features, but the consistency and simplicity of the core libraries are just brilliant. Java collections are an absolute pleasure, more than any other language I've worked with. And they support just about any type of collection you can think of, natively. And they're FAST.
You did leave out one popular option, which is Unity. This is ideal if you want a really, really fast start. The basic edition is free, and you can use DropBox for source control (since unless you pay for version control support otherwise, it can be problematic). It uses Mono C#, although not the newest version.