@monkeychops it works by monitoring the location of the camera (which is usually stuck to a character or vehicle or whatever) and loads terrain surrounding the player. You can set the view distance. So for example, if you have a view distance of 3, it will load 3 TerrainQuads in all directions. As you move from one TerrainQuad to another, it removes the ones behind and loads the ones in front of you. The TerrainQuads are loaded in a callable, and when ready, are added to the rootNode, so there is no “lag” when you move around. Kinda like this:

The image shows a view distance of one chunk. The blue dot is the player. When the player moves from the central chunk, the chunk location will change. You can know this by simple bitshifting. In my terrain, each chunk is 129x129, so by bitshifting you can work out the chunk location:
[java]
int playerX = (int)playerLocation.getX();
int playerZ = (int)playerLocation.getZ();
int chunkX = playerX >> 7;
int chunkZ = playerZ >>7;
[/java]
So now we know whether the player left the chunk. Then you simply calculate the theoretical surrounding chunks, compare it to the already loaded chunks, which leaves you with the new chunks to load, and also, using the same method, the old chunks to remove.
This method allows for easy view distance extension. Personally, I like to have a view distance of 3, which, gives us a fairly pleasant view distance. This also has the advantage of allowing us to maintain vegetation (trees, grass, etc…) on a “per chunk” basis, allowing us to add and remove vegetation automatically with the chunk. It also has the advantage of allowing us to maintain a relatively small set of static rigid objects (trees, for example) in one optimized node, and static non-rigid objects in another, and optimize them using GeometryBatchFactory per chunk, meaning we have decent sized RigidBodyControls - not too big, not too small (too big, and jme doesnt like it. Too small, too many objects, same result). This works really well with JmE.
The result:

Bearing in mind that this has no effects (AA, AF, bloom, shadows, etc…) running, (but I do have my atmospherics running, which drops the fps quite a bit) this has a view distance of 3, so 49 (7x7=49) chunks are loaded, 350 trees, 25088 grass billboards(!), 196 fir plants, and 147 rocks. Oh, and the player. i get an average of 260-280 fps when walking around - and I’m sure I can increase that at a guess by another 30-50 fps by optimizing the update loop. The FPS approximately doubles with a view distance of 2 (to around 500fps - 25 chunks) and again with a view distance of 1 (around 1000 - 1100 fps - 9 chunks).
I was thinking of providing some sort of structed useful code for others to use this, but i didnt think it was something people wanted. I’m happy to do so if it’s of any use.