I have used Tiled and I strongly recommend it for tile-based games. It also supports polygons, but it is not as well developed in that area (yet?).
Tiled can save levels in both XML and JSON.
Also, if you use the Slick2D library (as I do) then there's a class that automatically loads a tiled map from the Tiled program. There's a very useful Camera class that's on the Slick2D forum which really needs to be in the core Slick2D code. That camera class scrolls around the Tiled map object.
As far as saving data here's one way:
Create a level configuration class which holds all the level data. It has nothing to do with how the level works, it's only a list of objects on the level and the tiled background which the level should use. Create and fill that class and then marshal it to XML using Jaxb. Inside your game just get the XML filename and marshal it back form XML to Java and it will automatically create and fill your level configuration class.
There are many ways to do this. You could also use Java Serialization. With Serialization every time you change the format of the class you're saving the old serialized file will no longer work. So be aware of that. It's easier than Jaxb, but as things change serialization can be frustrating because you have to re-save your level to get the new serialization file.